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

pandas如何为现有DataFrame添加多级行索引并保留原索引

Pandas为DataFrame添加三级MultiIndex行索引

问题场景

初始单级行索引的DataFrame结构如下:

df
   0  1  2  3  4
0  5  0  0  2  6
1  9  6  5  8  6
2  8  9  4  2  1
3  2  5  8  9  6
4  8  8  8  0  8

需要转换为三级MultiIndex行索引的结构,要求:

  • 第一层级命名为A,取值为固定值1
  • 第二层级命名为B,取值为固定值2
  • 第三层级命名为C,取值为原始DataFrame的行索引
    期望输出结构:
df
         0  1  2  3  4
A  B  C
1  2  0  5  0  0  2  6
      1  9  6  5  8  6
      2  8  9  4  2  1
      3  2  5  8  9  6
      4  8  8  8  0  8

提供的最小可复现代码:

import pandas as pd
import numpy as np


df = pd.DataFrame(np.random.randint(10, size=(5, 5)))
df_a = 1
df_b = 2

breakpoint()

尝试使用df.reindex([df_a, df_b, df.index])实现时,触发unhashable type(不可哈希类型)报错。

报错原因

reindex方法的作用是按照传入的索引标签对现有行/列做重排、缺失值填充,不能用来新增多级索引层级;且传入的参数包含df.index这类Index对象,无法作为哈希键匹配索引,因此触发类型错误。

正确实现代码

使用pd.MultiIndex.from_product构造三级笛卡尔积索引,直接赋值给DataFrame的index属性即可:

import pandas as pd
import numpy as np


df = pd.DataFrame(np.random.randint(10, size=(5, 5)))
df_a = 1
df_b = 2

# 构造三级MultiIndex并设置索引名
df.index = pd.MultiIndex.from_product(
    [[df_a], [df_b], df.index],
    names=["A", "B", "C"]
)

运行后即可得到符合要求的三级索引结构。如果后续需要给A、B层新增其他取值,直接在对应列表中追加元素即可,方法会自动生成所有层级取值组合对应的索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:57:17