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

如何用Python的Pandas将多行重复数据转换为多列格式?

用Pandas实现多行合并为单行的解决方案

输入数据

ObjectIDTicketDescription
ob188ticket1information ticket1
ob188ticket2information ticket2

期望输出数据

ObjectIDTicketDescriptionTicketDescription
ob188ticket1information ticket1ticket2information ticket2

实现思路

核心是按重复的Object和ID分组,将每组内的Ticket和Description分别整理为列表,再将列表横向展开为多列,最后重组数据框。

示例代码

import pandas as pd

# 构造输入数据
df = pd.DataFrame({
    'Object': ['ob1', 'ob1'],
    'ID': [88, 88],
    'Ticket': ['ticket1', 'ticket2'],
    'Description': ['information ticket1', 'information ticket2']
})

# 按Object和ID分组,收集Ticket和Description为列表
grouped = df.groupby(['Object', 'ID']).agg({
    'Ticket': list,
    'Description': list
}).reset_index()

# 将列表展开为多列,并重新命名列名
def expand_list_columns(df, col_name):
    expanded = pd.DataFrame(df[col_name].tolist(), index=df.index)
    expanded.columns = [f'{col_name}_{i+1}' for i in expanded.columns]
    return expanded

expanded_tickets = expand_list_columns(grouped, 'Ticket')
expended_descriptions = expand_list_columns(grouped, 'Description')

# 合并所有列
result = pd.concat([grouped[['Object', 'ID']], expanded_tickets, expended_descriptions], axis=1)

# 可选:重命名列名匹配期望输出的无序号格式
result.columns = ['Object', 'ID', 'Ticket', 'Description', 'Ticket', 'Description']

print(result)

代码说明

  1. 分组收集:用groupby结合agg(list)把每组的票号和描述打包成列表,确保同一组的相关数据被聚合到一起。
  2. 列表展开:自定义函数将列表列拆分为多个独立列,自动生成带序号的列名(也可以手动修改为无序号)。
  3. 列合并:将分组后的基础列和展开后的列横向拼接,得到最终的单行结构。

原代码问题说明

你之前用的pivot_table思路不符合需求:

  • columns参数设置为['Description','Ticket Number']会生成多级列,但不是横向合并的效果
  • aggfunc='count'是统计计数,而非收集原始值,无法得到目标内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 21:41:10