如何合并两个DataFrame公共列并删除第二个表的多余重复行
实现方案
你可以通过先对第二个DataFrame去重+左连接的方式完成需求,具体操作如下:
步骤1:预处理第二个DataFrame,按公共合并列去重
首先消除第二个DataFrame中公共列的重复值,避免合并时出现行数膨胀:
# 请将下述代码中的'id'替换为你实际使用的公共合并列名 # keep='first'表示保留重复行的第一条,可按需调整为'last'保留最后一条 df2_dedup = df2.drop_duplicates(subset='id', keep='first')
步骤2:执行左连接合并,保证结果行数和第一个DataFrame完全一致
使用pandas的merge方法指定左连接模式,会完全保留左表(第一个DataFrame)的所有行:
# df1为第一个DataFrame,on参数填写你的公共合并列名 result = pd.merge(left=df1, right=df2_dedup, on='id', how='left')
方案说明
- 提前去重第二个DataFrame的公共列,避免因右表重复键值导致合并后行数多于左表
- 左连接(
how='left')会1:1保留左表全部行,右表没有匹配到的字段会自动填充NaN,完全符合你要求的最终表格行数和第一个DataFrame完全一致的规则 - 如果不需要保留未匹配到的空值行,可在合并后增加
result.dropna(subset=df2.columns),但这样会导致行数少于原左表,可按需选择
内容的提问来源于stack exchange,提问作者Dylan Forrester
相关产品推荐
相关产品推荐

