我有一个 pandas 数据框,我称之为 df。它有列“A”和“B”。
A B
1 0 3
2 1 4
3 2 5
我想添加一列“C”。 'C' 应该是函数 f 在边界 ('A', 'B') 上的定积分。目前,函数 f 只是 f(x) = x,但将来我将有不同的函数需要映射,而不是简单地求解积分并将“C”计算为 (B^2 - A^2)/2,我想实现一个程序化的解决方案。
以下作品:
from scipy.integrate import quad
df['C'] = df.apply(lambda x: quad(lambda x: x, x[0], x[1])[0], axis=1)
不过,这也显得很不雅观。我发现很难相信应用包含另一个函数的 lambda 函数的数据框方法以第三个函数(目前也是一个 lambda)作为输入是真的做到这一点的最佳方法.
是否有语法上不那么糟糕的方法来实现我将“C”定义为 f 在边界(“A”、“B”)上的积分的最终目标?
最佳答案
我相信你的方法很好,但我会推荐如下内容以提高可读性:
# Explicitly define your function.
def func(x):
# For example, y = x^2
return x ** 2
# Explicitly reference A and B end points.
df['C'] = df.apply(lambda x: quad(func, x.A, x.B)[0], axis=1)
您还可以使用列表理解:
df['C'] = [quad(func, a, b)[0] for a, b in zip(df.A, df.B)]
关于python - 使用 pandas 系列元素作为边界的简洁/优雅集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31396801/