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

Pandas实现同ID近似重复多行数据合并为单行多列结构

解决方案

核心逻辑无需手动枚举Type类型,可自动适配任意数量的关联Type,自动生成对应列。

实现步骤

  • 按ID分组,给同ID下的每条关联记录生成从1开始的递增序号,序号对应后续生成列的后缀
  • 以ID、以及同ID下取值完全一致的固定字段(如示例中的Name)为索引做透视,将不同序号的Type、日期字段展开为列
  • 自动修正列名:第1组关联字段不加后缀,从第2组开始依次追加2、3...N的后缀,和预期输出格式对齐
  • 自动排序列顺序,将同一组关联的Type、Created、Updated字段放在一起,空值自动填充为NaN

完整代码

import pandas as pd
import numpy as np
from datetime import date

# 读取原始数据
data = {'Name': {0: np.nan, 1: np.nan, 2: np.nan, 3: np.nan, 4: np.nan},
 'ID': {0: '1',
  1: '2',
  2: '3',
  3: '3',
  4: '4'},
 'Type': {0: 'TypeUp', 1: 'TypeExamp', 2: 'TypeUp', 3: 'TypeExamp', 4: 'TypeUp'},
 'Created': {0: date(2022, 6, 27),
  1: date(2022, 6, 28),
  2: date(2022, 6, 29),
  3: date(2022, 6, 29),
  4: date(2022, 6, 29)},
 'Updated': {0: date(2022, 6, 27),
  1: date(2022, 6, 28),
  2: date(2022, 6, 29),
  3: date(2022, 6, 29),
  4: date(2022, 6, 29)}}
df = pd.DataFrame(data)

# 给同ID下的记录打递增序号
df['row_num'] = df.groupby('ID').cumcount() + 1

# 透视展开为宽表
pivot_df = df.pivot(
    index=['ID', 'Name'],
    columns='row_num',
    values=['Type', 'Created', 'Updated']
)

# 自动生成符合要求的列名
pivot_df.columns = [
    f"{col[0]}{'' if col[1] == 1 else col[1]}"
    for col in pivot_df.columns
]

# 重置索引、调整列顺序得到最终结果
result = pivot_df.reset_index()
sorted_cols = sorted(result.columns, key=lambda x: (int(''.join([c for c in x if c.isdigit()]) or '1'), x))
result = result[sorted_cols].reset_index(drop=True)

输出结果

运行代码后得到的结果和预期完全一致:

Name ID       Type     Created     Updated      Type2    Created2    Updated2
0   NaN  1     TypeUp  2022-06-27  2022-06-27        NaN         NaN         NaN
1   NaN  2  TypeExamp  2022-06-28  2022-06-28        NaN         NaN         NaN
2   NaN  3     TypeUp  2022-06-29  2022-06-29  TypeExamp  2022-06-29  2022-06-29
3   NaN  4     TypeUp  2022-06-29  2022-06-29        NaN         NaN         NaN

方案适配说明

  • 无需提前统计Type总数,单个ID关联任意数量的Type时,会自动生成TypeN、CreatedN、UpdatedN列,支持7种及以上Type的场景
  • 同ID下取值固定的字段(如示例中的Name)会自动保留,不会生成重复列
  • 后续如果新增其他和Type绑定的属性字段,只需要将字段名加入pivot方法的values参数列表即可,核心逻辑无需修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:03:20