You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取两个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 14:45:26