如何对Pandas multilevel DataFrame进行pivot/transpose以实现指定格式转换?
解决方案
操作步骤
要完成这个多级DataFrame的结构转换,核心是调整索引与列的层级关系,具体操作如下:
- 还原原始DataFrame结构
先复现你的初始数据结构:
import pandas as pd data = [['M', 10, 1, 50, 14], ['F', 20, 3, 5, 2]] columns = pd.MultiIndex.from_tuples([ ('Gender', ''), ('A', 'sum'), ('A', 'count'), ('B', 'sum'), ('B', 'count') ]) df = pd.DataFrame(data, columns=columns)
- 将Gender列设为行索引
把表格中Gender列的M/F值转为行索引,为后续转置做准备:
df = df.set_index(('Gender', ''))
- 转置DataFrame
交换行与列,让原有的A/B、sum/count组合成为行索引,M/F成为列:
df_transposed = df.T
- 拆分多级行索引为普通列
把转置后的多级行索引拆分为Category(对应A/B)和Metric(对应sum/count)两列:
df_reset = df_transposed.reset_index(names=['Category', 'Metric'])
- 重塑表格并调整列层级
通过pivot重新组织结构,再交换列的层级顺序,让M/F成为第一层级列,sum/count成为第二层级:
result = df_reset.pivot(index='Category', columns='Metric').swaplevel(axis=1).sort_index(axis=1)
- 整理最终格式
重置行索引,把Category列重命名为Gender,并调整表头对齐:
result = result.reset_index().rename(columns={'Category': 'Gender'}) # 适配多级表头显示逻辑 result.columns = pd.MultiIndex.from_tuples([ ('Gender', '') if col[0] == 'Gender' else (col[1], col[0]) for col in result.columns ])
执行完上述代码后,输出结果将完全匹配你预期的多级DataFrame结构。
内容的提问来源于stack exchange,提问作者Gen
相关产品推荐
相关产品推荐

