使用 Pandas .different() 从时间序列计算二阶导数

Calculating second order derivative from timeseries using Pandas .diff()

下面是我的 Pandas 数据框的示例,日期为索引:

            A
2019-01-09  1.007042
2019-01-10  1.007465
2019-01-11  1.007054
2019-01-12  1.007154
2019-01-13  1.007854
2019-01-14  1.008560

我想确定 A 列每 2 行的二阶导数。是否适合使用 Pandas 中的 .diff() 函数两次进行此确定?

df['A2'] = df['A'].diff(2).diff(2)

对于你们之间的差异,请调用pd.Series.diff两次

df['A2'] = df['A'].diff().diff()

print(df)

                   A        A2
2019-01-09  1.007042       NaN
2019-01-10  1.007465       NaN
2019-01-11  1.007054 -0.000834
2019-01-12  1.007154  0.000511
2019-01-13  1.007854  0.000600
2019-01-14  1.008560  0.000006

pd.Series.diff 的参数是 periods,所以 pd.Series.diff(2) returns 一个值和 2 行外的一个值之间的差异。但这不是你想要的。

这是一个九个月大的问题,但仍然出现在 google 搜索此 material 的顶部,因此保证了一个可以接受的答案。如果这个免责声明是不必要的,我希望有人帮我删除它。

二阶导数可以计算为中心导数、前向导数或后向导数,但根据您的示例,我认为您正在寻找向后导数。如果需要,可以在每一行上计算它,但是,使用 diff() 可能真的很难做到。函数shift()虽然很好用,方法如下:

df['A2'] = df['A'] - 2*df['A'].shift(1) + df['A'].shift(2)

技术依赖finite differences