pandas使用merge做左连接时相同行数据重复填充如何解决?
问题根因
你遇到的合并后数据重复是因为右表data2的关联键Accountn存在重复值:pandas的merge操作会对关联键做笛卡尔积匹配,左表data1的每一行会匹配右表中所有Accountn相同的行,你当前每条数据重复3次,说明你读取的data2.csv里每个Accountn对应了3条重复数据,虽然你给出的示例中data2是去重的,但实际文件中存在重复。
验证方法
运行以下代码确认右表重复情况:
# 查看data2中Accountn列的重复行数 print(data2['Accountn'].duplicated().sum())
如果输出结果大于0,即可确认是右表重复导致的问题。
解决方案
方案1:先对右表去重再合并(优先推荐,性能更高)
在合并前先对data2的关联键去重,保证每个Accountn仅保留1条数据:
import pandas as pd data1 = pd.read_csv('data1.csv') data2 = pd.read_csv('data2.csv') data1.rename(columns={'acc_name':'Accountn'},inplace = True) # 新增:对data2的Accountn去重,保留第一个匹配的status data2_unique = data2[['Accountn','status']].drop_duplicates(subset='Accountn', keep='first') final = pd.merge(data1, data2_unique, on=['Accountn'], how='left')
方案2:合并完成后整体去重
如果确认合并后的重复行是完全一致的,也可以合并后直接对结果去重:
final = pd.merge(data1,data2[['Accountn','status']],on=['Accountn'],how='left').drop_duplicates()
内容的提问来源于stack exchange,提问作者user13024918
相关产品推荐
相关产品推荐

