如何使用Pandas按行计算同分组跨年份的指标百分比增长
Pandas 分组追加增长率行实现方案
核心逻辑:按Col1维度分组,利用pandas内置函数计算相邻年份的同比增长率,将结果调整为和原表结构匹配的行后拼接至原表末尾。
实现步骤
- 构建原始样本DataFrame,对齐给定的字段和数据结构:
import pandas as pd data = { "Col1": ["A", "A", "B", "B", "C", "C"], "Col2": [2019, 2020, 2019, 2020, 2019, 2020], "Jan": [100, 200, 10, 20, 1000, 2000], "Feb": [200, 300, 20, 30, 2000, 3000], "Mrz": [300, 400, 30, 40, 3000, 4000], "Total": [600, 900, 60, 90, 6000, 9000] } df = pd.DataFrame(data)
- 计算各分组同比增长率:
利用pandas内置的pct_change函数计算组内相邻行的环比值,因每个分组内2019年数据在前、2020年数据在后,直接取每组最后一行的计算结果即为目标增长率,乘100后取整对齐示例输出格式:
# 按Col1分组计算增长率 growth_calc = df.groupby("Col1", as_index=False)[["Jan", "Feb", "Mrz", "Total"]]\ .pct_change()\ .groupby(df["Col1"])\ .last()\ .mul(100)\ .round(0)\ .astype(int) # 补充Col2固定值、对齐列顺序 growth_calc["Col2"] = "GrowthInPercent" growth_calc = growth_calc[df.columns]
- 垂直拼接原表与增长率行,得到最终结果:
final_df = pd.concat([df, growth_calc], ignore_index=True)
结果校验:生成的增长率行完全匹配示例目标值——所有分类的Jan列增长率100、Feb列增长率50、Mrz列增长率33、Total列增长率50,维度字段、列顺序与原表完全一致。
内容的提问来源于stack exchange,提问作者TimR
相关产品推荐
相关产品推荐

