如何按国家分组对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
相关产品推荐
相关产品推荐

