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中所有出现过的IDinner:仅保留两张表都存在的ID
内容的提问来源于stack exchange,提问作者Fazli
相关产品推荐
相关产品推荐

