无需手动拆分拼接,如何将DataFrame转换为列多层索引格式?
Pandas 实现列多级索引转换(无需手动拆分拼接)
问题背景
我有如下DataFrame:
import pandas as pd data = { "cat": ['A'] * 3 + ['B'] * 2, "val1": [10, 9, 12, 20, 25], "val2": [1, 3, 2, 6, 7], "idx": [0, 1, 5, 1, 2] } df = pd.DataFrame(data) df.set_index('idx', inplace=True)
对应的结构为:
cat val1 val2 idx 0 A 10 1 1 A 9 3 5 A 12 2 1 B 20 6 2 B 25 7
希望将其转换为带有列MultiIndex的DataFrame:
A B val1 val2 val1 val2 idx 0 10 1 NA NA 1 9 3 20 6 2 NA NA 25 7 5 12 2 NA NA
请问是否可以无需手动拆分并水平拼接表格来实现这一转换?
解决方案
完全可以,直接用pandas内置的pivot方法就能搞定,不需要手动拆分再拼接:
# 执行 pivot 转换 result = df.pivot(index='idx', columns='cat', values=['val1', 'val2']) # 调整列索引层级顺序,和目标结构对齐 result = result.swaplevel(axis=1).sort_index(axis=1)
关键步骤说明
pivot(index='idx', columns='cat', values=['val1', 'val2']):指定idx为行索引,cat的取值(A、B)作为列的上层索引,val1和val2作为列的下层索引,自动匹配对应位置的值,缺失的位置会填充NaN。swaplevel(axis=1).sort_index(axis=1):交换列多级索引的层级顺序,让A/B成为第一层级,val1/val2成为第二层级,再按列索引排序,最终结构就和你想要的完全一致了。
运行这段代码后,就能得到目标格式的DataFrame。
内容的提问来源于stack exchange,提问作者Martin Kowalski
相关产品推荐
相关产品推荐

