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

Pandas:将透视表堆叠列拆分为带类别命名的新列

解决DataFrame透视表列名展平与重命名问题

需求说明

将包含重复IDNum、Category的DataFrame转换为每行对应一个IDNum,列名以Category_value格式展示对应数值的结构。

原始DataFrame

import pandas as pd

df = pd.DataFrame({'IDNum': [1, 1, 2, 3, 3, 4], 'Category': ['a', 'b', 'a', 'c', 'b', 'b'],
                   'value1': [1.5, 2.2, 3.6, 5.1, 6.0, 1.0], 'value2': [2.0, 3.6, 4.5, 8.2, 6.1, 1.2]})

输出:

IDNum   Category    value1  value2
0   1       a           1.5     2.0
1   1       b           2.2     3.6
2   2       a           3.6     4.5
3   3       c           5.1     8.2
4   3       b           6.0     6.1
5   4       b           1.0     1.2

已生成的透视表

通过pivot_table生成了多级列名的透视表:

table = pd.pivot_table(df,
                       values=['value1', 'value2'],
                       index = 'IDNum',
                       columns = 'Category')

输出:

value1          value2
Category a    b     c    a    b     c
IDNum                       
1        1.5  2.2   NaN  2.0  3.6   NaN
2        3.6  NaN   NaN  4.5  NaN   NaN
3        NaN  6.0   5.1  NaN  6.1   8.2
4        NaN  1.0   NaN  NaN  1.2   NaN

解决方案

只需两步即可将多级列名展平为Category_value格式,并将IDNum转为普通列:

# 合并多级列名,按"Category_value"格式拼接
table.columns = table.columns.map(lambda x: f"{x[1]}_{x[0]}")
# 重置索引,把IDNum从索引转为普通列
result = table.reset_index()

最终结果

IDNum  a_value1  b_value1  c_value1  a_value2  b_value2  c_value2
0      1       1.5       2.2       NaN       2.0       3.6       NaN
1      2       3.6       NaN       NaN       4.5       NaN       NaN
2      3       NaN       6.0       5.1       NaN       6.1       8.2
3      4       NaN       1.0       NaN       NaN       1.2       NaN

补充方法

如果不想先创建透视表,也可以直接用unstack一步到位:

result = df.set_index(['IDNum', 'Category']).unstack()
result.columns = result.columns.map(lambda x: f"{x[1]}_{x[0]}")
result = result.reset_index()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 10:42:04