Pandas如何从第二个DataFrame提取首表含对应id的记录(保留重复)
Pandas跨表筛选保留重复记录实现方案
现有数据集说明
- 初始参照DataFrame(
df1):
id name status HV200 john Present HV300 harry Absent HV400 peter Present
- 待筛选目标DataFrame(
df2):
id name status HV200 john Present HV200 john Absent HV300 harry Absent HV400 peter Present HV500 steven Absent HV300 harry Present
需求
从df2中提取所有id值存在于df1中的条目,完整保留所有重复记录,不做去重处理。
实现代码
用pandas内置的isin()方法做布尔索引筛选是最高效、最贴合需求的方案,不会产生多余的匹配行,也不会改动原有数据结构:
# 提取df1中所有目标id值 valid_ids = df1['id'].unique() # 筛选df2中id属于目标集合的所有行 filtered_df = df2[df2['id'].isin(valid_ids)].reset_index(drop=True)
筛选结果
执行代码后得到的输出如下:
id name status 0 HV200 john Present 1 HV200 john Absent 2 HV300 harry Absent 3 HV400 peter Present 4 HV300 harry Present
可以看到id为HV500的无关条目已被过滤,HV200、HV300对应的所有重复记录都完整保留,符合预期。
避坑提示:不要直接用内连接
merge实现该需求,当两个表的匹配键都存在重复值时,内连接会生成笛卡尔积,产生额外的无效行,isin筛选不会出现这个问题。
内容的提问来源于stack exchange,提问作者Roshankumar
相关产品推荐
相关产品推荐

