为何Pandas中df.diff(2)与df.diff().diff()结果存在差异?
搞懂Pandas里两种二阶差分的差异
先从定义说起,根据Enders的《应用计量经济时间序列》,变量y的二阶差分定义为对一阶差分再做一次差分,也就是:
Δ²yₜ = Δyₜ - Δyₜ₋₁ = (yₜ - yₜ₋₁) - (yₜ₋₁ - yₜ₋₂) = yₜ - 2yₜ₋₁ + yₜ₋₂
但在Pandas里,df.diff(2)和df.diff().diff()得到的结果可不是一回事,我给你拆解下:
先看你提供的数据集示例:
In [8]: df Out[8]: C.1 C.2 C.3 C.4 C.5 C.6 C.0 1990 16.0 6.0 256.0 216.0 65536 4352 1991 17.0 7.0 289.0 343.0 131072 5202 1992 6.0 -4.0 36.0 -64.0 64 252 1993 7.0 -3.0 49.0 -27.0 128 392 1994 8.0 -2.0 64.0 -8.0 256 576
两种方法的本质区别
df.diff(2):计算的是当前值与向前第2个周期值的直接差值,也就是yₜ - yₜ₋₂,这其实是跨度为2的一阶差分,不是真正的二阶差分。df.diff().diff():先做一次一阶差分(Δyₜ = yₜ - yₜ₋₁),再对这个结果做一次一阶差分,得到的才是符合计量定义的二阶差分Δ²yₜ = Δyₜ - Δyₜ₋₁。
拿C.1列举个直观例子:
- 用
df.diff(2)计算1992年的值:6.0 - 16.0 = -10.0 - 用
df.diff().diff()计算1992年的值:(6.0-17.0) - (17.0-16.0) = (-11) - (1) = -12.0,这和Enders书中的定义完全一致。
所以如果你的需求是计量经济学里的二阶差分,一定要用df.diff().diff(),而diff(2)只是跨度为2的一阶差,别搞混啦!
内容的提问来源于stack exchange,提问作者Alechan
相关产品推荐
相关产品推荐

