You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:49:04