Pandas 中 2 列匹配,但另一列不匹配

问题描述 投票:0回答:3

我一直在尝试使用 pandas 解决一个问题,但它已经困扰我几天了。我有 2 个数据框:

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)

描述起来有点棘手,但我希望返回一个数据框:

  • Provider1 不在提供者 2 中,其中 GMC1 和 GMC2 匹配
  • 如果 Provider2 为 NaN,则算作与 Provider1 不匹配

因此,对于示例数据:

mergeDF = pd.merge(dataframe1, dataframe2, how = 'inner', left_on = 'GMC1', right_on = 'GMC2')

mergeDF = mergeDF[['GMC1', 'GMC2', 'Provider1', 'Provider2']]

GMC1 GCM2 提供商1 提供商2
1 1 101 101
5 5 103 150
5 5 150 150
8 8 160 NaN
8 8 567 NaN
9 9 450 340
13 13 230 230
  • 对于 GMC = 1,我不希望返回任何内容,因为 gmc 和提供程序值都匹配。
  • 对于 GMC = 5,我只想要provider1 = 103 的行,因为还有另一行GMC = 5,其中provider1 和provider2 的值都是150。
  • 返回 GMC = 8 和 9 的行,因为 Provider2 中没有对应的值

我已尝试在 GMC 上进行上述合并,然后在provider1和provider2列上再次合并,但我无法获得我想要的输出。我还尝试使用 isin() 函数和否定 (~),但我也无法让它工作,所以我有点生气......

所需输出:

GMC1    GMC2    Provider1
5       5           103
8       8           160
8       8           567
9       9           450

我希望这是有道理的,但如果需要的话,我很乐意进一步澄清。

非常感谢您提前的帮助

python pandas dataframe
3个回答
2
投票

合并是正确的,但我认为你想要

how="left"
。然后就可以查询合并了:

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

输出:

   GMC1  Provider1  GMC2  Provider2
1     3        102   NaN        NaN
2     5        103   5.0      150.0
4     8        160   8.0        NaN
5     9        450   9.0      340.0
6     8        567   8.0        NaN

2
投票

我想你可以这样查询合并:

mergeDF.loc[~((mergeDF["GMC1"] == mergeDF["GMC2"]) & (mergeDF["Provider1"]==mergeDF["Provider2"]))]
  GMC1 GMC2 Provider1 Provider2
1   5   5    103       150.0
3   8   8    160       NaN
4   8   8    567       NaN
5   9   9    450       340.0

0
投票

东德 2. 基恩 3. 宽多 4. 宽托斯 5. 阙 6. 科莫 7. 库阿尔 A。 ¿_____ 你最喜欢动物吗? b. 你是母亲吗? C。 ¿_____ 研究? d. ¿_____ 是你吗? Yo soy de Estados Unidos。 e. ¿_____ libros tienes tú? F。 ¿_____ 你是我最好的朋友吗? G。 ¿_____ 是数学考试吗?是上午 8 点。

© www.soinside.com 2019 - 2024. All rights reserved.