如何将DataFrame行多索引中的聚合方法维度转为列?
解决方案
你可以用unstack()方法快速实现这个需求——它专门用于将行多索引的指定层级转移到列维度,搭配reset_index()整理结构就能得到目标表格。
示例操作
假设你的原始DataFrame结构如下(行是EntityType+聚合方法的多索引,列是单索引数值列):
import pandas as pd # 构造示例数据 data = {'Value': [10, 20, 30, 40]} multi_index = pd.MultiIndex.from_tuples( [('foo', 'sum'), ('foo', 'mean'), ('bar', 'sum'), ('bar', 'mean')], names=['EntityType', 'AggMethod'] ) df = pd.DataFrame(data, index=multi_index)
原始表格输出:
Value EntityType AggMethod foo sum 10 mean 20 bar sum 30 mean 40
执行以下代码完成转换:
# 将聚合方法索引层级转到列 transformed_df = df.unstack(level='AggMethod').reset_index() # 整理列名,移除多级列的外层标签 transformed_df.columns = ['EntityType', 'mean', 'sum']
最终得到的目标结构:
EntityType mean sum 0 foo 20 10 1 bar 40 30
关键细节
unstack(level='AggMethod'):通过指定索引层级名称,精准把行中的聚合方法维度转为列reset_index():将剩余的EntityType索引转回普通列,让表格结构更直观- 后续新增其他
EntityType(如'baz')时,直接复用这段代码即可自动适配,无需调整逻辑
如果你的多索引层级顺序不同,只需修改unstack()的level参数(可以用层级名称或索引位置,比如level=1)。
内容的提问来源于stack exchange,提问作者Sidney
相关产品推荐
相关产品推荐

