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

如何保留两个DataFrame指定列取值相同的行并获取被删除行

按A列交集筛选DataFrame并获取删除行的实现方法

你目前写的df3、df4的筛选代码逻辑是正确的,获取deleted_df可以通过以下方法实现:

方法1:直接取反筛选后拼接

通过pandas布尔索引的取反符~筛选出两个表中A列不在对方表中的行,再纵向拼接即可:

import pandas as pd

# 你已有的筛选逻辑
df3 = df1[df1['A'].isin(df2['A'])].reset_index(drop=True)
df4 = df2[df2['A'].isin(df1['A'])].reset_index(drop=True)

# 筛选两个表中被删除的行并拼接
df1_del = df1[~df1['A'].isin(df2['A'])]
df2_del = df2[~df2['A'].isin(df1['A'])]
deleted_df = pd.concat([df1_del, df2_del], ignore_index=True)

方法2:预计算交集提升效率

如果数据量较大,可提前计算A列的交集值集合,后续所有筛选都复用这个集合,减少重复计算:

import pandas as pd

# 提前计算A列的共同取值集合
common_a_vals = set(df1['A']) & set(df2['A'])

# 筛选保留行
df3 = df1[df1['A'].isin(common_a_vals)].reset_index(drop=True)
df4 = df2[df2['A'].isin(common_a_vals)].reset_index(drop=True)

# 拼接删除行
deleted_df = pd.concat(
    [df1[~df1['A'].isin(common_a_vals)], df2[~df2['A'].isin(common_a_vals)]],
    ignore_index=True
)

补充说明

代码中reset_index(drop=True)用来重置筛选后的行索引,和你给出的预期输出格式一致,如果不需要可以去掉该参数。
你也可以通过删除已保留行的索引来获取被删除行,效果和上述取反筛选等价:

df1_del = df1.drop(df3.index)
df2_del = df2.drop(df4.index)
deleted_df = pd.concat([df1_del, df2_del], ignore_index=True)

内容的提问来源于stack exchange,提问作者Hamouza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:15:04