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

如何在DataFrame中合并重复信息并将ID聚合为列表

合并同日期同事件记录并将ID聚合为列表

需求说明

将同一天且事件描述相同的记录合并为一条,把所有参与者ID聚合为列表;事件描述不同则保留为独立行。后续会持续新增事件数据并合并到现有表格。

现有问题

当前代码仅按Date分组,且用sum聚合ID导致ID被拼接成字符串,不符合列表形式的需求。

解决方案

关键修改点

  • 分组键改为['Date', 'Description'],确保同日期+同描述的记录才会合并
  • ID的聚合方式替换为list,直接生成列表格式的ID集合
  • 可选:用reset_index()将分组索引转为普通列,让表格结构更直观

修改后的完整代码

import pandas as pd

# 原始数据
x1 = ['2023-06-20','2023-06-20','2023-06-20','2023-06-20','2023-06-20',
      '2023-06-23','2023-06-23','2023-06-23','2023-06-23','2023-06-23']
x2 = ['1','2','3','4','5','1','2','3','4','5']
x3 = ['test1','test1','test1','test1','test1','test2','test2','test2','test2','test2']

df = pd.DataFrame({'Date': x1,
                   'ID': x2,
                   'Description': x3
                   })

# 定义聚合规则:Date和Description取第一个值,ID转为列表
agg_functions = {'Date': 'first', 'ID': list, 'Description': 'first'}

# 按日期和事件描述分组聚合
df_new = df.groupby(['Date', 'Description']).aggregate(agg_functions).reset_index(drop=True)

print(df_new)

运行结果

Date                     ID Description
0  2023-06-20  ['1', '2', '3', '4', '5']        test1
1  2023-06-23  ['1', '2', '3', '4', '5']        test2

后续新增数据的处理方法

当有新数据时,可按以下步骤操作:

  1. 将新数据整理为同结构的DataFrame(例:命名为new_df)
  2. 合并现有结果与新数据:combined_df = pd.concat([df_new, new_df], ignore_index=True)
  3. 重新执行分组聚合,确保新数据被正确合并:
# 重新聚合,避免重复分组导致的错误
final_df = combined_df.groupby(['Date', 'Description']).aggregate({
    'ID': lambda x: list(pd.unique([item for sublist in x for item in sublist])),
    'Date': 'first',
    'Description': 'first'
}).reset_index(drop=True)

注:用pd.unique和嵌套列表推导式是为了避免新增数据中重复ID被多次加入列表;若需要保留重复ID,直接用lambda x: [item for sublist in x for item in sublist]即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:43:32