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

如何在pandas多层索引DataFrame中垂直映射值新增索引层级

pandas多层列索引新增层级实现方案

问题核心

你需要对已有的两层列索引(顶层Region、二级Pet)的DataFrame,基于Pet->Kind的映射关系,新增第三级列索引Kind,不需要做横向/纵向合并操作,核心是重构多层列索引对象即可。


实现步骤

  • 首先构造测试数据与映射字典
import pandas as pd

# 初始化原始DataFrame
origin_cols = pd.MultiIndex.from_tuples(
    [("Region1", "Cat"), ("Region1", "Dog"), ("Region2", "Cat"), ("Region2", "Dog")],
    names=["Region", "Pet"]
)
df = pd.DataFrame(
    data=[[1,8,5,9], [4,3,7,1]],
    columns=origin_cols
)

# 把参考映射表转成字典方便匹配
pet_kind_ref = pd.DataFrame({
    "Pet": ["Cat", "Dog"],
    "Kind": ["Tabby", "Weiner"]
})
pet_kind_dict = pet_kind_ref.set_index("Pet")["Kind"].to_dict()
  • 提取原有列索引各层级的值,映射生成新层级取值,重构三层列索引
# 提取原有两个层级的索引值
region_vals = df.columns.get_level_values("Region")
pet_vals = df.columns.get_level_values("Pet")
# 匹配生成Kind层级的取值
kind_vals = [pet_kind_dict[pet] for pet in pet_vals]

# 组装新的三层MultiIndex
new_cols = pd.MultiIndex.from_arrays(
    arrays=[region_vals, pet_vals, kind_vals],
    names=["Region", "Pet", "Kind"]
)

# 替换原DataFrame的列
df.columns = new_cols
  • 最终输出结果完全匹配预期结构:
Region  Region1         Region2        
Pet        Cat  Dog       Cat  Dog
Kind     Tabby Weiner   Tabby Weiner
0            1      8        5      9
1            4      3        7      1

检索提示

之前搜不到对应方案是因为术语偏差:这个操作不属于表合并/拼接(merge/concat/join)范畴,属于pandas MultiIndex层级扩展,后续可以用这个关键词检索相关场景的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:45:33