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

Pandas如何将行MultiIndex的DataFrame转换为MultiColumn结构

实现方案

直接用unstack指定要转换的行索引层级即可,核心代码仅需1行,不需要组合多个复杂变形方法。

核心代码

import pandas as pd
import numpy as np

# --- 原有数据构造逻辑 ---
multiindex1 = pd.MultiIndex.from_product([['a'], np.arange(3, 8)])
df1 = pd.DataFrame(np.random.randn(5, 3), index=multiindex1)
multiindex2 = pd.MultiIndex.from_product([['s'], np.arange(1, 6)])
df2 = pd.DataFrame(np.random.randn(5, 3), index=multiindex2)
multiindex3 = pd.MultiIndex.from_product([['d'], np.arange(2, 7)])
df3 = pd.DataFrame(np.random.randn(5, 3), index=multiindex3)
df = pd.concat([df1, df2, df3])

# --- 转换逻辑 ---
result = df.unstack(level=0).swaplevel(axis=1).sort_index(axis=1)

实现说明

  • 之前用unstack没得到正确结果,是因为该方法默认拆解行索引的最内层(level=-1,也就是数据里的数值索引层),只要显式指定level=0,就会把行索引第0层的分类标签(a/s/d)转到列维度。
  • unstack会自动对齐行索引第1层的所有取值,把所有出现过的数值(1到7)作为新的单一行索引,没有对应数据的位置自动填充NaN,不需要额外做重索引或者缺失值填充。
  • swaplevel(axis=1)用来交换列两层索引的顺序,把分类标签a/s/d放到列MultiIndex的第0层,原有列名0/1/2放到第1层,和目标结构完全一致;sort_index(axis=1)用来按列标签排序,保证同个分类下的列连续展示。

输出效果

转换后的数据结构和目标格式完全匹配:

a                             s                             d
          0         1         2         0         1         2         0         1         2
1       NaN       NaN       NaN -0.972483  0.202820  0.265304       NaN       NaN       NaN
2       NaN       NaN       NaN  0.007303  0.802974 -0.254106  1.440793 -0.697371  0.902004
3  0.872208 -0.145098 -0.519966  1.619309 -1.545089  0.161493  0.390181 -0.449725 -0.462104
4 -0.976089 -0.730808 -1.463151  2.847376  0.951796 -0.877882  0.056916  0.140066  0.918281
5 -0.026869  0.227912  1.525924  1.749237 -0.327026  0.467784  0.164234 -2.491176  2.035113
6 -0.161126 -0.415913 -1.211737       NaN       NaN       NaN -1.648948  0.372179  0.600297
7 -0.893881 -0.769385  0.346436       NaN       NaN       NaN       NaN       NaN       NaN

注:示例里列名写的b/c为笔误,实际对应原数据里的s/d分类。

内容的提问来源于stack exchange,提问作者f1msch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:31:09