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

如何用Python Pandas按共享Item ID将DataFrame行值转置为新列?

Pandas 实现重复Item ID的属性列转行

示例输入数据

假设你的原始DataFrame结构如下(以单属性列为例):

import pandas as pd

data = {
    'Item ID': ['A001', 'A001', 'A002', 'A002', 'A002'],
    'Attribute': ['红色', '纯棉', '蓝色', '涤纶', '修身']
}
df = pd.DataFrame(data)

核心解决方案

通过分组标记序号+透视表的方式,将同一Item ID的多行属性转为多列:

# 为每个Item ID的重复行生成递增序号(从1开始)
df['attr_seq'] = df.groupby('Item ID').cumcount() + 1

# 透视转换:Item ID作为行索引,序号作为列,属性值填充单元格
pivot_df = df.pivot(index='Item ID', columns='attr_seq', values='Attribute')

# 重命名列名,让格式更清晰
pivot_df.columns = [f'Attribute_{num}' for num in pivot_df.columns]

# 重置索引,把Item ID从索引转回普通列
final_df = pivot_df.reset_index()

输出结果

运行后final_df的结构如下:

Item IDAttribute_1Attribute_2Attribute_3
A001红色纯棉NaN
A002蓝色涤纶修身

扩展:包含其他固定属性列的情况

如果你的DataFrame还有其他与Item ID一一对应的列(比如商品名称),可以先提取唯一信息再合并:

# 示例带额外列的输入
data = {
    'Item ID': ['A001', 'A001', 'A002', 'A002', 'A002'],
    'Name': ['T恤', 'T恤', '裤子', '裤子', '裤子'],
    'Attribute': ['红色', '纯棉', '蓝色', '涤纶', '修身']
}
df = pd.DataFrame(data)

# 提取Item ID与固定属性的唯一对应关系
fixed_attr = df[['Item ID', 'Name']].drop_duplicates().set_index('Item ID')

# 处理属性列转行
df['attr_seq'] = df.groupby('Item ID').cumcount() + 1
attr_pivot = df.pivot(index='Item ID', columns='attr_seq', values='Attribute')
attr_pivot.columns = [f'Attribute_{num}' for num in attr_pivot.columns]

# 合并固定属性与转换后的属性列
final_df = fixed_attr.join(attr_pivot).reset_index()

关键说明

  • groupby('Item ID').cumcount():用于标记每个Item ID下的行顺序,确保属性列按原始顺序排列
  • pivot():是实现行转列的核心方法,自动将同一索引下的不同列值展开为多列
  • 若存在缺失值(如示例中A001只有2个属性),会用NaN填充,可通过fillna('')替换为空字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 08:30:11