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

如何使用Pandas删除DataFrame中与另一DataFrame匹配姓名生日的行

Pandas 删除指定列匹配的DataFrame行

以下是几种高效实现需求的方法:

方法一:通过merge定位匹配行后筛选

先通过内连接找到df1和df2在Full name、Birth date列上匹配的行,再通过索引筛选出df1中未匹配的行:

import pandas as pd

# 假设df1、df2已初始化完成
# 获取两表匹配的行
matched = df1.merge(df2, on=['Full name', 'Birth date'], how='inner')
# 筛选并重置索引
df1_filtered = df1[~df1.index.isin(matched.index)].reset_index(drop=True)

方法二:利用元组集合快速匹配

将两列组合成元组,通过集合判断来筛选:

# 生成df2中匹配列的元组集合
match_tuples = set(zip(df2['Full name'], df2['Birth date']))
# 逐行判断是否在匹配集合中,取反得到结果
df1_filtered = df1[
    ~df1.apply(lambda row: (row['Full name'], row['Birth date']) in match_tuples, axis=1)
].reset_index(drop=True)

方法三:合并后去重保留独有行

给两个DataFrame添加来源标识,合并后去重保留仅在df1中出现的行:

# 添加来源标记
df1['_source'] = 'df1'
df2['_source'] = 'df2'

# 合并后按目标列去重,只保留未重复的行
combined = pd.concat([df1, df2]).drop_duplicates(subset=['Full name', 'Birth date'], keep=False)
# 提取df1的行并清理标记列
df1_filtered = combined[combined['_source'] == 'df1'].drop('_source', axis=1).reset_index(drop=True)

# 清理原df1的标记列(如果不需要保留)
df1.drop('_source', axis=1, inplace=True)

内容的提问来源于stack exchange,提问作者Сергей Корягин

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:10:18