PySpark:如何合并两个DataFrame且去除重复行(排除已存在行)?
嘿,这个需求很常见,我给你两种实用的解决方法,都能完美得到你想要的结果👇
首先先把你的示例数据用代码还原出来:
import pandas as pd # 创建DataFrame A df_a = pd.DataFrame({'A': [1, 3], 'B': [2, 1]}) # 创建DataFrame B df_b = pd.DataFrame({'A': [5, 3], 'B': [6, 1]})
方法一:合并后去重(简单直观)
这种方法适合数据量不大的场景,步骤清晰易懂:先把两个DataFrame上下拼接,再移除重复行,并且保留第一次出现的行(也就是A里的原有行,自动去掉B中重复的那一行),最后重置索引让它连续规整。
代码实现:
# 拼接A和B → 去重 → 重置索引 merged_df = pd.concat([df_a, df_b]).drop_duplicates(keep='first').reset_index(drop=True)
运行后merged_df的结果就是你期望的:
A B 0 1 2 1 3 1 2 5 6
方法二:先筛选再合并(适合大数据量)
如果你的DataFrame数据量很大,先合并再去重可能会占用较多内存,这时候可以先筛选出B中完全不存在于A里的行,再和A合并,效率会更高。
代码实现:
# 筛选出B中所有不在A里的行 b_unique_rows = df_b[~df_b.isin(df_a).all(axis=1)] # 合并A和筛选后的B行,再重置索引 merged_df = pd.concat([df_a, b_unique_rows]).reset_index(drop=True)
这里df_b.isin(df_a).all(axis=1)会逐行判断B的每一行是否和A中的某一行完全匹配,~是取反操作,拿到的就是B中独有的行,再和A合并就得到了目标结果。
内容的提问来源于stack exchange,提问作者Mohan Badgujar
相关产品推荐
相关产品推荐

