使用 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)
下面是我的 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)