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

如何将Pandas单表头DataFrame转换为多层列索引?

将单表头DataFrame转换为带ID映射的多层列索引DataFrame

需求说明

需要把单表头的Pandas DataFrame转换成多层列索引格式:

  • 非ID类列(示例中的A列)保留为第一列,上层表头为空、下层为列名
  • ID类列对应另一DataFrame中的名称作为上层表头,原ID作为下层表头
  • 最终列顺序需匹配指定的名称排列

示例数据

import pandas as pd
import numpy as np

# 构造基础数据列
df = pd.DataFrame({"A": ['fay','fee','fie','foe']})
# 构造ID类数值列
df1 = pd.DataFrame(np.random.randint(0,10,size=(4,4)), columns=['012','015','016','018'])
# 合并得到单表头DataFrame
df1 = pd.merge(df, df1, right_index=True, left_index=True)

# 存储ID与对应名称的映射表
df2 = pd.DataFrame({'id':['018','015','012','016'], 'name':['boom','bing', 'bota','bada']})
dict_id = dict(zip(df2.id, df2.name))

实现步骤

  1. 定义目标列顺序:按照期望的名称排列,对应到原ID列的顺序
# 对应目标表头的bota、bing、bada、boom,对应的ID依次是012、015、016、018
target_id_order = ['012', '015', '016', '018']
  1. 构造多层列索引元组
  • 为非ID列A生成层级元组:('', 'A'),对应上层空表头、下层列名
  • 为ID列生成(名称, ID)的元组,基于映射字典和目标顺序
# 非ID列的多层索引
non_id_cols = [('', 'A')]
# ID列的多层索引
id_multi_cols = [(dict_id[id], id) for id in target_id_order]
# 合并所有列的多层索引
multi_columns = non_id_cols + id_multi_cols
  1. 重新设置列顺序与多层索引
# 调整df1的列顺序,确保和目标一致
df1 = df1[['A'] + target_id_order]
# 设置多层列索引
df1.columns = pd.MultiIndex.from_tuples(multi_columns)

最终效果

执行后df1的结构如下:

bota  bing bada boom
     A  012   015  016  018
0   fay   0    3    1    5
1   fee   1    2    9    7
2   fie   5    1    0    3
3   foe   0    7    8    5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:20:56