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

如何通过表连接筛选两个DataFrame的匹配记录?

用Pandas实现双表连接筛选目标记录

没问题,这事儿用Pandas处理起来很直观!你需要从df1里筛选出和df2中kol_id、jnj_id、thrc_nm完全匹配的记录,对吧?我给你两种常用的实现方法,按需选择就行:

第一步:先构建示例数据

先把你给出的示例数据用代码还原,方便后续测试:

import pandas as pd

# 构建df1
df1 = pd.DataFrame({
    'kol_id': [101152, 251489, 100856],
    'jnj_id': [7124166, 7822721, 7356682],
    'kol_full_nm': ['Constance Ann Benson', 'Mariam S Aziz', 'William Rodney Short'],
    'foc_area_id': [1, 1, 1],
    'thrc_cd': ['VIR', 'VIR', 'VIR'],
    'thrc_nm': ['VIR', 'VIR', 'VIR']
})

# 构建df2
df2 = pd.DataFrame({
    'kol_id': [101152],
    'jnj_id': [7124166],
    'thrc_nm': ['VIR']
})

方法一:用merge做内连接(推荐)

这是最简洁的方式,直接指定多列作为匹配键,用内连接只保留两边都匹配的行:

# 内连接匹配,保留df1的所有列
df_final = pd.merge(df1, df2, on=['kol_id', 'jnj_id', 'thrc_nm'], how='inner')

解释:

  • on=['kol_id', 'jnj_id', 'thrc_nm']:指定这三列必须同时匹配才算符合条件
  • how='inner':只保留两个表中都存在的匹配行,刚好符合你的需求

方法二:布尔索引+多列匹配

如果你更习惯用筛选的思路,可以把匹配条件转成元组集合,再逐行判断:

# 把df2的匹配列打包成元组集合
match_tuples = set(zip(df2['kol_id'], df2['jnj_id'], df2['thrc_nm']))
# 筛选df1中符合条件的行
df_final = df1[df1[['kol_id', 'jnj_id', 'thrc_nm']].apply(tuple, axis=1).isin(match_tuples)]

验证结果

运行任意一种方法后,打印df_final就能得到你想要的结果:

kol_id   jnj_id         kol_full_nm  foc_area_id thrc_cd thrc_nm
0  101152  7124166  Constance Ann Benson            1     VIR     VIR

内容的提问来源于stack exchange,提问作者shivam patel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 07:42:32