Pandas如何筛选两表GMC列匹配但Provider列不匹配的行
完整实现代码
import pandas as pd import numpy as np # 构造原始数据 data = {'GMC1':[1, 3, 5, 5, 8, 9, 8, 13], 'Provider1':[101, 102, 103, 150, 160, 450, 567, 230]} dataframe1 = pd.DataFrame(data) data2 = {'GMC2':[1, 5, 7, 22, 11, 13, 9, 8], 'Provider2':[101, 150, 150, 670, 567, 230, 340, np.nan]} dataframe2 = pd.DataFrame(data2) # 内连接两表 mergeDF = pd.merge(dataframe1, dataframe2, how = 'inner', left_on = 'GMC1', right_on = 'GMC2') mergeDF = mergeDF[['GMC1', 'GMC2', 'Provider1', 'Provider2']] # 计算每个GMC对应的有效Provider2集合(排除NaN) gmc_provider2_map = mergeDF.dropna(subset=['Provider2']).groupby('GMC1')['Provider2'].agg(set).to_dict() # 筛选符合条件的行:Provider1不在对应GMC的Provider2集合中 result = mergeDF[mergeDF.apply(lambda x: x['Provider1'] not in gmc_provider2_map.get(x['GMC1'], set()), axis=1)] # 输出指定列 result = result[['GMC1', 'GMC2', 'Provider1']] print(result)
实现逻辑说明
- 先对合并后的表做分组统计,剔除
Provider2为NaN的无效值后,将每个GMC对应的所有Provider2值存储为集合,便于后续快速判断归属关系 - 逐行校验当前行的
Provider1是否不在对应GMC的Provider2集合中,符合条件的行保留 - 最终输出指定三列即可,运行结果和预期完全一致
内容的提问来源于stack exchange,提问作者SirSnitch
相关产品推荐
相关产品推荐

