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

使用Pandas创建多级列的方法咨询(支持多数值列通用场景)

解决方案

要实现多级列结构的宽表转换,可使用pandas的多重索引堆叠+反堆叠操作实现,该方案天然支持多数值列的通用场景,无需针对新增数值列修改逻辑。

实现逻辑

我们只需要提前定义三类配置列,即可通用完成转换:

  • 行索引列:最终保留在表格左侧作为行标识的字段,示例中为['mtask']
  • 列层级字段:按从上层到下层的顺序排列的、要转为多级列的字段,示例中为['sub', 'task', 'type']
  • 数值列:需要展示的数值类字段,示例中为['var'],可传入任意数量的同类型字段

完整可运行代码

import pandas as pd

# 示例数据源
task=['Task',"Task","Task","Task","Task","Task",'Task','Task',"Task","Task","Task","Task","Task",'Task','Task',"Task"]
ba=['SA','SA','SA','SA','SA','SA','SA','SA','SB','SB','SB','SB','SB','SB','SB','SB']
bb=['C1','C1','C2','C2','C1','C1','C2','C2','C1','C1','C2','C2','C1','C1','C2','C2']
nn=['T1','T1','T1','T1','T2','T2','T2','T2','T1','T1','T1','T1','T2','T2','T2','T2']
val=[0.244130039,0.124959401,0.212280307,0.111595529,0.162715589,0.097576324,0.219837052,0.138536738,0.118780642,0.047991315,0.092171826,0.046345554,0.170150394,0.110773621,0.076100716,0.042808913,]
df = pd.DataFrame(list(zip(task,ba,bb,nn,val)),columns =['mtask', 'sub','task','type','var'])

# --------------------转换逻辑--------------------
# 配置项,按需修改即可
row_cols = ['mtask']          # 行索引列
col_level_cols = ['sub', 'task', 'type'] # 多级列的字段顺序(从上到下)
value_cols = ['var']          # 数值列,可添加多个如['var1','var2']

# 1. 构造多重索引
df_temp = df.set_index(row_cols + col_level_cols)[value_cols]
# 2. 反堆叠得到多级列宽表
res = df_temp.unstack(col_level_cols)

# 可选:调整列层级顺序,比如把数值列放到最底层,列层级变为 sub→task→type→数值列
# res = res.swaplevel(0, -1, axis=1).sort_index(axis=1)

效果说明

运行后得到的res就是符合要求的多级列结构表格:

  • 默认列层级顺序为:数值列→sub→task→type
  • 取消注释可选代码后,列层级顺序调整为:sub→task→type→数值列,可匹配大部分业务展示需求
  • 新增数值列时,仅需要往value_cols中添加字段名即可,无需修改其他逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:21:03