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

Pandas透视表计算月度环比 1月匹配上年12月数据如何实现

实现方法

你可以通过两种方式实现需求,分别适配小数据量和通用场景:

方法1:直接修正1月数据(适合年份较少的场景)

在你原有计算逻辑的基础上,单独计算每年1月相对上年12月的变化率,填充到结果表中即可:

# 原有基础环比计算(同年内相邻月份对比)
df_month_pctchange = df.pct_change(axis=0).mul(100).round(2)

# 遍历所有年份列,补全1月的环比值
for col_idx in range(1, len(df.columns)):
    # 取上年12月的数值、当年1月的数值
    last_year_dec_val = df.loc[12, df.columns[col_idx-1]]
    curr_year_jan_val = df.loc[1, df.columns[col_idx]]
    # 计算变化率并赋值
    jan_pct = (curr_year_jan_val - last_year_dec_val) / last_year_dec_val * 100
    df_month_pctchange.loc[1, df.columns[col_idx]] = round(jan_pct, 2)

print(df_month_pctchange)

方法2:转换为时间序列计算(通用场景,适配任意年份数量)

如果你的数据年份较多,更推荐把二维表转为时间序列格式计算,逻辑更简洁不容易出错:

import pandas as pd

# 转换为长表结构
df_long = df.stack().reset_index()
df_long.columns = ['month', 'year', 'value']
# 构造完整日期列,按时间顺序排序
df_long['date'] = pd.to_datetime(df_long['year'].astype(str) + '-' + df_long['month'].astype(str))
df_long = df_long.sort_values('date')
# 计算全局环比
df_long['pct_change'] = df_long['value'].pct_change().mul(100).round(2)
# 转换回原透视表结构
df_month_pctchange = df_long.pivot(index='month', columns='year', values='pct_change')

print(df_month_pctchange)

运行上述任意一种方法,即可得到和你期望一致的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:57:03