You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:05:09