我正在尝试计算熊猫Series
的导数,即(x[n] - x[n-1]) / (t[n] - t[n-1])
。
x[n] - x[n-1]
(不是我想要的)。还请注意,pandas.Series.diff
计算有限差分,并且文档没有要求计算导数。
下面是一个例子:
>>> s = pd.Series([1, 2, 3, 4], [1, 2, 4, 7])
>>> s.diff() / np.gradient(s.index)
1 NaN
2 0.666667
4 0.400000
7 0.333333
dtype: float64
是否没有单独的函数调用来完成此操作?我也不想重新取样——那太过分了。
注意:
np.diff
不能工作,因为它的输出比输入短Index
没有类似Series.diff
的方法
我正在尝试计算熊猫系列的导数,即
(x[n] - x[n-1]) / (t[n] - t[n-1])
。
这个是列的有限差分除以索引的有限差分。
。
>>> s = pd.Series([1, 2, 3, 4], [1, 2, 4, 7])
>>> s.diff() / s.index.to_series().diff()
1 NaN
2 1.000000
4 0.500000
7 0.333333
dtype: float64
请注意,这将得到与使用np.gradient()的解决方案略有不同的答案。Np.gradient()对导数使用双边近似。文档
这里有一个例子显示np.gradient()不仅仅是t[n] - t[n-1]
。在求导数的近似值时,它同时考虑了前一个和下一个元素。
>>> np.gradient([1, 2, 1000])
array([ 1. , 499.5, 998. ])
通常进行这种非常具体的操作的最佳方法是利用pandas的基础知识并自己编写:
(
pd.DataFrame({'x':[1, 2, 3, 4], 't':[1, 2, 4, 7]})
.assign(xnm1=lambda d: d.x.shift(-1),
tnm1=lambda d: d.t.shift(-1))
.pipe(lambda d: (d.x - d.xnm1) / (d.t - d.tnm1))
)