如何通过表连接筛选两个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
相关产品推荐
相关产品推荐

