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

Pandas合并两DataFrame按GMC匹配后筛选Provider2不在Provider1的记录

Pandas多表匹配筛选缺失值解决方案

错误原因说明

直接使用右连接加不等值判断的逻辑存在缺陷:相同GMC值下两个表的多行数据会生成笛卡尔积,只要存在任意一组Provider1不等于Provider2就会被保留,无法排除「当前Provider2已经在对应GMC的Provider1列表中存在匹配」的情况,因此会产生大量误筛结果。

实现代码

首先导入依赖并构造测试数据:

import pandas as pd
import numpy as np

# 构造测试用DataFrame
df1 = pd.DataFrame({
    "GMC1": [1,1,1,2,3,3,3],
    "Provider1": [100,101,102, np.nan, 104,105,106]
})
df2 = pd.DataFrame({
    "GMC2": [1,2,3,3,3],
    "Provider2": [101,100,104,105,107]
})

核心实现逻辑

  • 先对df1做预处理,按GMC1分组,将每个分组下非空的Provider1转为集合,生成GMC到Provider集合的映射字典,可实现O(1)复杂度的存在性判断
  • 遍历df2的每一行,筛选出Provider2不在对应GMC的Provider集合中的行即可
# 生成GMC到Provider集合的映射
gmc_provider_map = df1.dropna(subset=["Provider1"])\
                      .groupby("GMC1")["Provider1"]\
                      .apply(set)\
                      .to_dict()

# 筛选符合要求的结果
result = df2[df2.apply(
    lambda row: row["Provider2"] not in gmc_provider_map.get(row["GMC2"], set()),
    axis=1
)]

输出结果

运行代码后得到的result输出如下,和预期完全一致:

GMC2  Provider2
1     2        100
4     3        107

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:45:09