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
相关产品推荐
相关产品推荐

