如何按年份分组获取Pandas列的汇总统计信息?
解决方案
可以通过groupby结合describe,再调整列结构来实现你的需求,不需要扩展pd.describe()本身,pandas自带的方法就能搞定。
方法一:分步调整结构
- 按
Year分组并计算描述统计:
stats = dat.groupby('Year')[['ColA', 'ColB']].describe()
这会生成一个带层次化列索引的结果,行对应年份,列的第一层是ColA/ColB,第二层是统计量(如count、mean、std等)。
- 转置并重构结构:
# 转置后重置索引,拆分层次化行索引 stats_transposed = stats.T.reset_index() stats_transposed.columns = ['Column', 'Stat', '2007', '2008'] # 用透视表重新组织数据,让统计量作为行,年份+列名作为列 result = stats_transposed.pivot(index='Stat', columns='Column', values=['2007', '2008']) # 合并列名,生成"年份_列名"的格式 result.columns = [f'{year}_{col}' for year, col in result.columns]
方法二:紧凑写法(利用索引层级调整)
如果追求代码简洁,可以直接通过stack和unstack调整索引:
stats = dat.groupby('Year')[['ColA', 'ColB']].describe() result = stats.stack().unstack(0).unstack(0) result.columns = [f'{year}_{col}' for year, col in result.columns]
最终result的行是各类统计量,列则是2007_ColA、2007_ColB、2008_ColA、2008_ColB,完全匹配你想要的输出格式。如果数据包含更多年份,代码会自动适配,无需手动修改年份参数。
内容的提问来源于stack exchange,提问作者324
相关产品推荐
相关产品推荐

