如何在Pandas合并操作中获取被排除的数据行?
获取数据集中不匹配的记录(左反连接实现)
你需要的是左反连接效果:从第一个数据集(付费用户)中提取所有在第二个数据集里没有匹配项的记录,以下用Pandas给出两种实用方案:
方法1:使用merge+indicator参数
这种方法适合需要基于多列匹配的场景,能明确标记每条记录的来源:
import pandas as pd # 构造示例数据集 premium_users = pd.DataFrame({ 'user_id': [1, 2, 3, 4], 'username': ['alice', 'bob', 'charlie', 'david'] }) # 对比数据集(比如包含已匹配的付费用户+其他用户) comparison_users = pd.DataFrame({ 'user_id': [3, 4, 5, 6], 'username': ['charlie', 'david', 'eve', 'frank'] }) # 执行左连接并添加来源标记列 merged_result = premium_users.merge( comparison_users, on='user_id', # 如果是多列匹配,改成on=['user_id', 'email']即可 how='left', indicator=True ) # 筛选仅存在于付费用户数据集的记录,即不匹配的1、2类数据 non_matched_df = merged_result[merged_result['_merge'] == 'left_only'].drop(columns='_merge')
方法2:使用isin+取反操作
如果只需要基于单个键(比如user_id)筛选,这种方法更简洁高效:
# 直接筛选user_id不在对比数据集中的记录 non_matched_df = premium_users[~premium_users['user_id'].isin(comparison_users['user_id'])]
两种方法最终都会得到包含user_id为1、2的新DataFrame,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Rf Rizki
相关产品推荐
相关产品推荐

