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

Pandas按ID合并两个DataFrame并避免ID行重复、对应值存为列表的实现方法

实现方案

你可以先对右表df2按ID字段分组,将每个ID对应的多组数据聚合为列表,再和左表df1进行合并,最终得到的结果不会出现ID重复行。

完整实现代码

import pandas as pd
import numpy as np

# 示例数据构造
data1 = {'ID': ['AB01','AB02'], 
    'Name': ["toyota", "honda"],
    'Age':[21,22]
   }
df1 = pd.DataFrame.from_dict(data1)
data2 = {'ID': ['AB01','AB01','AB03','AB03'], 
    'Type': ["C",np.nan,"X","S"],
    'Score':[87,98,45,82]
   }
df2 = pd.DataFrame.from_dict(data2)

# 步骤1:对df2按ID分组,所有列聚合为列表
df2_grouped = df2.groupby('ID').agg(list).reset_index()

# 步骤2:和df1合并,how参数可按需调整
df_merge = df1.merge(df2_grouped, on='ID', how='left')

可选优化说明

  • 如果你不需要保留列表里的空值,可以在聚合时加过滤逻辑:
df2_grouped = df2.groupby('ID').agg(lambda x: [i for i in x if pd.notna(i)]).reset_index()
  • 合并时的how参数可选值:
    • left:仅保留df1中存在的ID,符合主表补数据的常规场景
    • outer:保留df1和df2中所有出现过的ID
    • inner:仅保留两张表都存在的ID

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:48:02