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

手动计算涨跌幅与pandas pct_change接口计算结果不一致原因问询

差异产生的核心原因

首先是计算公式逻辑本质不同:

  • pandas官方pct_change()方法对收盘价序列的默认计算逻辑是:
    当期涨跌幅 = (当期收盘价 / 前一期收盘价) - 1 = (当期收盘价 - 前一期收盘价) / 前一期收盘价
    
    分母为前一期收盘价,是金融领域通用的涨跌幅计算规则。
  • 你编写的手动公式展开后逻辑为:
    你的公式(1- (df['Close'] / df['Close'].shift(-1))).shift(1)等价于:
    当期涨跌幅 = (当期收盘价 - 前一期收盘价) / 当期收盘价
    
    分母为当期收盘价,和官方方法的分母完全不同,自然会出现数值差异。
验证示例

假设2021-08-18收盘价为138,2021-08-19收盘价为138.347:

  • 用官方pct_change计算:(138.347/138) -1 ≈ 0.0025145,四舍五入后为0.002515,和你得到的官方结果一致
  • 用你的手动公式计算:(138.347 - 138)/138.347 ≈ 0.002508,四舍五入后为0.002509,和你得到的手动计算结果完全匹配
复现pct_change的正确写法

如果要手动复现pct_change的结果,正确公式应为:
df['Close'] / df['Close'].shift(1) - 1
用该公式计算的结果和官方方法完全一致,仅可能存在可忽略的浮点精度误差。

内容的提问来源于stack exchange,提问作者Slartibartfast

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:42:01