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

如何将DataFrame分组后的多行Category转置为多列?

问题描述

我有如下DataFrame:

ID1ID2Category
A01OCC
A01HUI
A01IAC
A03OCC
B05OCC
B05HUI
C08IAC

希望以ID1和ID2为分组依据,将Category列转置为多列,列数取分组中Category的最大数量(示例中为3列),填充对应值,不足的列留空,得到如下结果:

ID1ID2Category1Category2Category3
A01OCCHUIIAC
A03OCC
B05OCCHUI
C08IAC
实现方法

可以通过Pandas的分组标记序号+透视转置来实现,具体步骤如下:

  1. 添加组内序号:按ID1和ID2分组后,给每个组内的Category标记从1开始的序号,为后续转置列做准备。
  2. 透视转置:以ID1、ID2为索引,序号为列,Category为值进行透视,自动生成对应数量的列。
  3. 重命名列:将序号列重命名为Category1、Category2的格式。
  4. 填充空值:将转置后缺失的位置填充为空字符串,重置索引恢复正常结构。

代码实现

import pandas as pd

# 构造原始DataFrame
df = pd.DataFrame({
    'ID1': ['A', 'A', 'A', 'A', 'B', 'B', 'C'],
    'ID2': ['01', '01', '01', '03', '05', '05', '08'],
    'Category': ['OCC', 'HUI', 'IAC', 'OCC', 'OCC', 'HUI', 'IAC']
})

# 给每个分组内的Category添加从1开始的序号
df['seq'] = df.groupby(['ID1', 'ID2']).cumcount() + 1

# 透视转置,生成多列
pivot_df = df.pivot(index=['ID1', 'ID2'], columns='seq', values='Category')

# 重命名列名
pivot_df.columns = [f'Category{col}' for col in pivot_df.columns]

# 重置索引并填充空值
result = pivot_df.reset_index().fillna('')

print(result)

输出结果

运行代码后得到的结果与目标完全一致:

ID1ID2Category1Category2Category3
A01OCCHUIIAC
A03OCC
B05OCCHUI
C08IAC

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:57:45