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

时间:2019-02-03 16:46:57

标签: python pandas difference derivative differentiation

下面是我的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列确定一次二阶导数。是否适合两次在Pandas中使用.diff()函数进行这种确定?

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

2 个答案:

答案 0 :(得分:2)

这是一个长达9个月的问题,但仍显示在Google搜索此材料的顶部,因此可以接受。如果不需要此免责声明,我希望有人可以为我删除它。

二阶导数可以计算为中心,前向或后向导数,但是基于您的示例,我认为您正在寻找向后导数。如果需要,可以在每一行上进行计算,但是,使用diff()可能真的很难。函数shift()可以很好地工作,其方法如下:

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

该技术依赖于finite differences

答案 1 :(得分:1)

要了解您之间的差异,请致电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的参数为期间,因此pd.Series.diff(2)返回2个行之间的值和值之间的差。但这不是您想要的。