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

如何在Pandas多级索引的指定位置插入多个新层级?

解决Pandas多级列索引插入冗余层级的问题

你现在的需求是给已有两层级列索引的DataFrame,在最外层前加一层固定值'V',在原第一、第二层级之间加一层固定值'W',最终得到四层结构的列索引。用pd.concat确实只能往最外层添加层级,没法插入到中间位置,得手动重构列索引才能实现。

原DataFrame结构

先确认原数据的列结构:

import pandas as pd

df = pd.DataFrame({('X','A'): ['a','a','b'], ('Y','A'): [1,2,3], ('X','B'): [4,6,5], ('Y','B'): [9,4,2]})

列索引为两层:

X   Y   X   Y
    A   A   B   B
-----------------
0   a   1   4   9
1   a   2   6   4
2   b   3   5   2

正确实现方法

核心思路是提取原列的两个层级数据,手动拼接成目标四层元组,再重新设置列索引并命名层级:

# 提取原列的两个层级值
level1 = df.columns.get_level_values(0)
level2 = df.columns.get_level_values(1)

# 构造新的四层列索引元组列表:(L1值, 原L1值, L3值, 原L2值)
new_columns = list(zip(['V']*len(df.columns), level1, ['W']*len(df.columns), level2))

# 设置新的多级列索引,并指定层级名称
df.columns = pd.MultiIndex.from_tuples(new_columns, names=['L1', 'L2', 'L3', 'L4'])

运行后即可得到目标结构:

L1  V
L2  X   Y   X   Y
L3  W
L4  A   A   B   B
-----------------
0   a   1   4   9
1   a   2   6   4
2   b   3   5   2

补充说明

这种手动拼接元组的方式灵活性最高,能精准控制每个层级的位置和取值,适合需要在多级索引中间插入层级的场景,完全不受pd.concat只能加外层的限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:13:24