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

如何在pandas DataFrame中计算并新增GDP年化增长率列

Pandas 批量计算GDP年化增长率的最佳实现

不要用iterrows()逐行遍历处理这类相邻行计算场景,pandas内置的向量化接口可以一行代码完成需求,运行效率更高、不会出现索引越界问题,计算结果完全匹配你的预期。

实现代码

import pandas as pd

# 构造你给出的示例数据集
df = pd.DataFrame({
    'GDP': [100, 101, 103, 107]
})

# 新增年化增长率列,索引0位置自动填充NaN
df['Annualized Growth Rate'] = ((df['GDP'] / df['GDP'].shift(1)) ** 4 - 1) * 100

# 如果需要和示例一样保留3位小数,追加round即可
# df['Annualized Growth Rate'] = df['Annualized Growth Rate'].round(3)

运行后输出的数据集和你给出的预期完全一致:

索引GDPAnnualized Growth Rate
0100NaN
11014.060
21038.159
310716.462

原代码报错原因

你之前写的iterrows()循环逻辑存在三个明显问题:

  • 遍历到索引0时,代码尝试取index-1 = -1对应的行,你的DataFrame不存在-1这个索引标签,直接触发索引越界报错
  • 循环内的赋值逻辑错误:df['Annualized Growth Rate'] = 单个值的写法每次循环都会覆盖整列数据,哪怕不报错最终整列也只会保留最后一次循环的计算结果
  • iterrows()属于逐行执行的非向量化实现,数据量越大运行速度越慢,不符合pandas使用规范,所有批量行列计算场景都不优先考虑。

等价简化写法

pandas内置了pct_change()方法专门计算环比变化率,和上述写法结果完全一致,代码更简洁:

df['Annualized Growth Rate'] = ((1 + df['GDP'].pct_change()) ** 4 - 1) * 100

注意事项

  • 计算前请确认DataFrame已经按时间先后顺序排序,否则会出现跨期计算错误
  • 如果数据中存在GDP缺失值,上述方法会自动在缺失值对应的行及下一行返回NaN,不需要额外写异常判断逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:15:44