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

无需手动拆分拼接,如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 08:48:19