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

如何使用Pandas将class_cd行转列为新列,按Id聚合数据?

Pandas实现行转列:将class_cd转为列名

原始数据

示例数据如下:

Id name class_cd class_name
0   1    A     abc1        dog
1   1    A     def2     canine
2   1    A     ghi1       safe
3   2    B     abc1        cat
4   2    B     def2      tabby

可通过以下代码复现:

import pandas as pd

df = pd.DataFrame({
    'Id': [1, 1, 1, 2, 2],
    'name':['A', 'A', 'A', 'B', 'B'],
    'class_cd': ['abc1', 'def2', 'ghi1', 'abc1', 'def2'],
    'class_name': ['dog', 'canine', 'safe', 'cat', 'tabby']
})

需求

将class_cd的唯一值作为新列名,列值为对应的class_name,最终每个Id(结合name)对应一行数据,期望输出:

Id  name    abc1    def2    ghi1
0   1      A     dog  canine    safe
1   2      B     cat   tabby    

解决方案

使用Pandas的pivot方法可以直接实现这个需求,指定分组的索引列、要转为列的字段以及填充值的字段即可:

result = df.pivot(index=['Id', 'name'], columns='class_cd', values='class_name').reset_index()
# 移除列索引的名称,避免输出冗余
result.columns.name = None
print(result)

运行后输出:

Id name   abc1    def2   ghi1
0   1    A    dog  canine   safe
1   2    B    cat   tabby    NaN

如果希望空值显示为空白而非NaN,可以添加fillna('')处理:

result = df.pivot(index=['Id', 'name'], columns='class_cd', values='class_name').reset_index().fillna('')
result.columns.name = None
print(result)

输出与期望完全一致:

Id name abc1    def2 ghi1
0   1    A  dog  canine safe
1   2    B  cat   tabby     

说明

  • index参数指定保持为行标识的列(Id和name组合后唯一确定每行);
  • columns参数指定要转换为列名的字段(即class_cd);
  • values参数指定填充到新列中的值(即class_name);
  • reset_index()用于将多级索引转为普通列;
  • columns.name = None用于移除列索引的冗余名称。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:21:28