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

如何将DataFrame的MultiIndex列第一层转为独立列

将列MultiIndex的第一层转为独立列

我有一个列带有MultiIndex的DataFrame,希望将列MultiIndex的第一层转为独立列。

原始DataFrame

import pandas as pd

df = pd.DataFrame(
    {
        ('a', 'm1'): [0,1],
        ('a', 'm2'): [10, 11],
        ('b', 'm1'): [2,3],
        ('b', 'm2'): [12, 13],
        ('c', 'm1'): [3,4],
        ('c', 'm2'): [13,14],
    },
)

显示样式:

a      b      c
   m1  m2 m1  m2 m1  m2
0  0  10  2  12  3  13
1  1  11  3  13  4  14

期望结果

m1 m2 level0
 0  10 a
 1  11 a
 2  12 b
 3  13 b
 3  13 c
 4  14 c

我尝试使用pd.melt方法,但未达到预期效果。


解决方案

用stack()方法处理最直接高效,它能把列索引的指定层级转为行索引,再调整结构即可:

# 堆叠第一层列索引(level=0对应a/b/c),转为行索引
result = df.stack(level=0).reset_index()
# 调整列名和顺序
result = result.rename(columns={'level_1': 'level0'}).drop('level_0', axis=1)[['m1', 'm2', 'level0']]

如果非要用pd.melt,需要先把列索引展开再处理,步骤稍多:

# 先将列的MultiIndex展开为普通列
df_unstacked = df.unstack().reset_index()
# 重命名列以便后续处理
df_unstacked.columns = ['level0', 'metric', 'value']
# 用pivot转回宽格式,再调整结构
result = df_unstacked.pivot(index=['level0', 'level_0'], columns='metric', values='value') \
                     .reset_index().drop('level_0', axis=1)[['m1', 'm2', 'level0']]

内容的提问来源于stack exchange,提问作者David Davó

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:12:51