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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 09:24:19