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

如何基于指定列创建分组多级表头重塑DataFrame?

DataFrame重塑:按第一列生成分组多级表头

需要将DataFrame按第一列(col1)分组,为其他列添加分组表头行,实现指定的多级表头结构。

初始DataFrame

import pandas as pd

df = pd.DataFrame(
    {
        'col1':['A','A','A','B','B','B'],
        'col2':[1,2,3,4,5,6],
        'col3':[1,2,3,4,5,6],
        'col4':[1,2,3,4,5,6],
        'colx':[1,2,3,4,5,6]
    }
)

尝试pd.pivot()的问题

使用pivot得到的分组层级方向不符合预期:

df.pivot(columns='col1', values=['col2','col3','col4','colx'])

输出结果:

col2      col3      col4      colx     
col1    A    B    A    B    A    B    A    B
0     1.0  NaN  1.0  NaN  1.0  NaN  1.0  NaN
1     2.0  NaN  2.0  NaN  2.0  NaN  2.0  NaN
2     3.0  NaN  3.0  NaN  3.0  NaN  3.0  NaN
3     NaN  4.0  NaN  4.0  NaN  4.0  NaN  4.0
4     NaN  5.0  NaN  5.0  NaN  5.0  NaN  5.0
5     NaN  6.0  NaN  6.0  NaN  6.0  NaN  6.0

预期输出

A                               B
col1    col2    col3    col4    colx    col2    col3    col4    colx
0       1       1       1       1       4       4       4       4
1       2       2       2       2       5       5       5       5
2       3       3       3       3       6       6       6       6

解决方案

通过给分组添加组内行索引,结合set_index和unstack调整列层级,实现预期结构:

# 为每个分组生成组内行号
df['group_idx'] = df.groupby('col1').cumcount()

# 设置多级索引并重塑,将col1转为列的上层分组
result = df.set_index(['group_idx', 'col1']).unstack('col1')

# 交换列的层级顺序,让分组(A/B)成为上层表头
result = result.swaplevel(axis=1).sort_index(axis=1)

# 移除索引名称,贴近预期输出格式
result.index.name = None

print(result)

输出结果:

A                               B
col1    col2 col3 col4 colx col2 col3 col4 colx
0         1    1    1    1    4    4    4    4
1         2    2    2    2    5    5    5    5
2         3    3    3    3    6    6    6    6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:35:20