求助:如何将Pandas MultiIndex转换为目标表格格式?
嘿,我太懂你折腾stack、unstack和cross-section却没得到理想结果的烦躁了!其实Pandas里有个超级省心的方法,完全不用循环拆分,分分钟就能把多级索引转成常规表格——那就是reset_index(),我给你分场景具体说说怎么用:
情况1:多级行索引转常规表格
如果你的DataFrame是多级行索引(也就是df.index是MultiIndex类型),直接调用reset_index()就能把所有索引层级一键转成列,剩下的就是标准的表格结构:
import pandas as pd # 先造个带多级行索引的示例DataFrame data = {'数值': [1, 2, 3, 4]} # 定义两级行索引,分别命名为"大类"和"小类" index = pd.MultiIndex.from_tuples( [('水果', '苹果'), ('水果', '香蕉'), ('蔬菜', '白菜'), ('蔬菜', '萝卜')], names=['大类', '小类'] ) df = pd.DataFrame(data, index=index) # 一键转成表格 flat_df = df.reset_index() print(flat_df)
运行后输出就是标准的表格:
大类 小类 数值 0 水果 苹果 1 1 水果 香蕉 2 2 蔬菜 白菜 3 3 蔬菜 萝卜 4
情况2:多级列索引转表格
要是你的DataFrame是多级列索引(df.columns是MultiIndex),可以先通过stack()把列索引转成行索引,再用reset_index()扁平化:
# 构造带多级列索引的示例 columns = pd.MultiIndex.from_tuples( [('一季度', '销量'), ('一季度', '利润'), ('二季度', '销量'), ('二季度', '利润')] ) df = pd.DataFrame([[100, 20, 150, 35], [80, 15, 120, 30]], columns=columns) # 转成表格格式 flat_df = df.stack(level=0).reset_index() # 给列重命名,让表格更清晰 flat_df.columns = ['行号', '季度', '销量', '利润'] print(flat_df)
输出结果:
行号 季度 销量 利润 0 0 一季度 100 20 1 0 二季度 150 35 2 1 一季度 80 15 3 1 二季度 120 30
进阶玩法:只转部分索引层级
如果你不想把所有索引都转成列,可以给reset_index()指定level参数,比如只转第二级行索引:
# 只把"小类"这个索引层级转成列 partial_flat_df = df.reset_index(level='小类')
另外,要是你想要的是交叉表样式的表格,pivot()或者pivot_table()也能满足需求,但reset_index()绝对是最通用、最省心的快速扁平化方法,比循环拆分高效太多,尤其数据量大的时候差距特别明显!
内容的提问来源于stack exchange,提问作者Sledge
相关产品推荐
相关产品推荐

