如何批量计算pandas DataFrame各列逐月环比增长率
pandas 批量计算多列相邻月份环比增长率
不需要逐列重复编写计算逻辑,用pandas内置方法可以一次性完成所有相邻月份列的环比计算,计算逻辑和你手动逐列写的公式完全一致。
核心实现方法
首先确认所有月份数值列严格按照时间先后顺序从左到右排列(比如7月→8月→9月→10月依次排列,不存在顺序错乱),之后直接调用pct_change方法即可:
# axis=1 表示按列方向(左右相邻)计算变化率 # 计算逻辑完全等价于 当期值/上期值 - 1,和你手动写的公式无差异 # 第一列因为没有更早的月份作为对比基准,会返回空值 growth_df = df.pct_change(axis=1, fill_method=None)
常见场景适配
- 如果你的DataFrame包含非数值的标识列(比如品类、地区、门店名这类不需要计算环比的文本列),可以先拆分标识列与数值列,计算完成后再拼接回去:
# 示例:假设「品类」列是标识列,其余列都是月份数值列 id_part = df[['品类']] num_part = df.drop(columns=['品类']) # 计算数值部分的环比 growth_part = num_part.pct_change(axis=1, fill_method=None) # 拼接回标识列得到最终结果 final_result = pd.concat([id_part, growth_part], axis=1)
- 如果需要批量修改列名,明确标记每个环比对应的对比月份,可以用如下代码批量生成列名:
new_col_names = [] for idx, col_name in enumerate(num_part.columns): if idx == 0: new_col_names.append(f"{col_name}(无环比基准)") else: prev_month = num_part.columns[idx-1] new_col_names.append(f"{col_name}环比{prev_month}增长率") growth_part.columns = new_col_names
效果说明
以4个月份列的场景为例,上述代码计算出的结果和逐列编写的growth_rate1/growth_rate2/growth_rate3数值完全一致,哪怕列数扩展到几十上百列,也不需要修改代码重复编写计算逻辑。
内容的提问来源于stack exchange,提问作者Kinsley. N
相关产品推荐
相关产品推荐

