如何将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ó
相关产品推荐
相关产品推荐

