如何获取两个DataFrame中不共享的行?(提取df1独有的行)
实现方法
针对你的需求,这里提供几种实用的Pandas解决方案:
方法1:使用merge外连接+标记筛选
通过外连接两个DataFrame,利用indicator参数标记行的来源,再筛选出仅存在于df1的行:
import pandas as pd # 假设df1、df2已初始化 merged_df = pd.merge(df1, df2, how='outer', indicator=True) df3 = merged_df[merged_df['_merge'] == 'left_only'].drop(columns='_merge')
_merge列会标记行来自left_only(仅df1)、right_only(仅df2)或both(两者都有),筛选后删除标记列即可得到目标结果。
方法2:使用concat+去重
将两个DataFrame合并后,删除所有重复出现的行(因为df2的行都在df1中,重复行就是df2的内容):
df3 = pd.concat([df1, df2]).drop_duplicates(keep=False)
keep=False会删除所有出现多次的行,剩下的就是df1中独有的数据,这个方法代码最简洁。
方法3:基于行元组的存在性判断
把每行数据转为元组,通过判断元组是否不在df2的元组集合中筛选:
# 将df1、df2的每行转为元组 df1_rows = df1.apply(tuple, axis=1) df2_rows = df2.apply(tuple, axis=1) # 筛选df1中不在df2里的行 df3 = df1[~df1_rows.isin(df2_rows)]
这个方法逻辑直观,但数据量较大时效率不如前两种方法。
内容的提问来源于stack exchange,提问作者Programming Noob
相关产品推荐
相关产品推荐

