python - Pandas Dataframe 合并其中 1 列匹配,但另一列的值不存在

标签 python pandas dataframe merge

这几天我一直在尝试使用 Pandas 解决一些问题,但我觉得我错过了一些东西。我有 2 个数据框:

data = {'GMC1':[1, 1, 1, 2, 3, 3, 3],
        'Provider1':[100, 101, 102, np.NaN, 104, 105, 106]}

dataframe1 = pd.DataFrame(data)

dataframe1

输出:

GMC1    Provider 1
1       100
1       101
1       102
2       NaN
3       104
3       105
3       106

data2 = {'GMC2':[1, 2, 3, 3, 3],
         'Provider2':[101, 100, 104, 105, 107]}

dataframe2 = pd.DataFrame(data2)

dataframe2

输出:

GMC2    Provider2
1       101
2       100
3       105
3       104
3       107

我希望返回一个数据帧,该数据帧连接到 GMC1 = GMC2,并返回 Provider2 行(这些行在 Provider1 中不存在),GMC1 和 GMC2 的值相同。

预期输出:

GMC1    GMC2    Provider 2
2       2       100
3       3       107

我尝试了使用联接的各种方法,如下所示:

(dataframe1.merge(dataframe2, left_on='GMC1', right_on='GMC2',
                  how='right')
           .query('Provider1 != Provider2')
)

但他们并没有完全带回我想要的东西。我知道这有点啰嗦,所以我很乐意详细说明。

非常感谢您的帮助!

最佳答案

对列和指标参数使用外连接,并按此新列进行过滤_merge:

df = dataframe1.merge(dataframe2, 
                      left_on=['GMC1', 'Provider1'],
                      right_on=['GMC2', 'Provider2'], 
                      how='right', 
                      indicator=True)

df = (df.loc[df['_merge'].eq('right_only'), ['GMC1','GMC2','Provider2']]
        .assign(GMC1 = lambda x: x['GMC2']))

print (df)
   GMC1  GMC2  Provider2
1     2     2        100
4     3     3        107

关于python - Pandas Dataframe 合并其中 1 列匹配,但另一列的值不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69823420/

相关文章:

python-3.x - 获取每个用户仅包含最新行的新数据框

python - 是否有减少 MultiIndex 的功能?

python - 将 pandas 数据框从长改为宽时自定义变量名称

python - 如何过滤嵌套的 JSON 并保留匹配的分支层次结构?

python - Pandas:通过按日期过滤来访问行

python - django_language cookie 安全失败

python - 更新 DataFrame 最后一行的最佳方法是什么?

python - 对 groupby 对象中的每个组应用重采样

python - 从 python datetime.datetime 对象中删除毫秒的简单方法

python - 更新 Pandas DataFrame 上行子集的列值的有效方法?