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

如何按国家分组对DataFrame行执行.diff()和.pct_change()操作?

Pandas按国家分组计算人口差分与变化率的高效方法

直接用Pandas的groupby+diff()/pct_change()组合就能解决,这是最原生高效的方式,完全不需要手动循环或拼接:

步骤1:先确保数据按国家+年份排序

如果数据包含年份列,必须先按国家和年份排序,保证每个国家的人口数据按时间顺序排列,否则计算的差分/变化率会混乱:

df = df.sort_values(['country', 'year'])

步骤2:分组计算差分和变化率

直接按country分组后,对population列调用对应函数,结果会自动匹配原数据的行:

# 计算相邻年份的人口变化量(差分)
df['population_diff'] = df.groupby('country')['population'].diff()

# 计算相邻年份的人口变化百分比
df['population_pct_change'] = df.groupby('country')['population'].pct_change()

为什么你之前的方法会出错?

  • 循环concat报TypeError:多半是循环中分组后的子数据框索引和原数据没对齐,或者concat的参数(比如axis)设置错误,导致拼接时结构不兼容。
  • 用append全出NaN:append在新版Pandas里已被弃用,且它会生成新的DataFrame,若未处理好索引对齐,新生成的列无法和原数据匹配,最终全部显示NaN。

额外注意事项

  • 如果需要计算间隔n年的变化,比如隔2年的差分/变化率,只需给函数传periods参数:diff(periods=2)、pct_change(periods=2)。
  • 若数据中有缺失值,diff()和pct_change()会自动保留NaN,你可以用fillna()处理,比如df['population_diff'] = df['population_diff'].fillna(0)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 15:43:17