Pandas如何过滤DataFrame中不存在于另一DataFrame列组合的行
Pandas多字段组合不匹配行筛选实现
需求说明
现有两个DataFrame df_2 和 df_count,需要筛选出df_2中Name_1、Name_2两列的组合,不在df_count对应列组合中的所有行。
实现方法
方法1:merge反连接(可读性高,推荐多字段匹配使用)
通过左连接+匹配标记的方式筛选不匹配行,逻辑清晰,不易出错:
# 对两个DataFrame按Name_1、Name_2做左连接,新增字段标记匹配来源 merged_df = df_2.merge(df_count, on=['Name_1', 'Name_2'], how='left', indicator=True) # 筛选仅在df_2中存在的行(即组合不匹配的行),删除标记字段得到最终结果 unmatched_df = merged_df[merged_df['_merge'] == 'left_only'].drop('_merge', axis=1)
方法2:组合列isin判断(写法简洁)
将两列组合为元组后判断是否在匹配列表中,代码更简短:
# 提取df_count中所有合法的Name_1、Name_2组合 valid_pairs = set(df_count.itertuples(index=False, name=None)) # 筛选df_2中组合不在合法集合内的行 unmatched_df = df_2[~df_2[['Name_1', 'Name_2']].apply(tuple, axis=1).isin(valid_pairs)]
输出说明
两种方法得到的unmatched_df就是所需的不匹配行结果,会保留df_2的所有原始字段。
内容的提问来源于stack exchange,提问作者Arpit
相关产品推荐
相关产品推荐

