我一直在尝试使用 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)
描述起来有点棘手,但我希望返回一个数据框:
因此,对于示例数据:
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 上进行上述合并,然后在provider1和provider2列上再次合并,但我无法获得我想要的输出。我还尝试使用 isin() 函数和否定 (~),但我也无法让它工作,所以我有点生气......
所需输出:
GMC1 GMC2 Provider1
5 5 103
8 8 160
8 8 567
9 9 450
我希望这是有道理的,但如果需要的话,我很乐意进一步澄清。
非常感谢您提前的帮助
合并是正确的,但我认为你想要
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
我想你可以这样查询合并:
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
东德 2. 基恩 3. 宽多 4. 宽托斯 5. 阙 6. 科莫 7. 库阿尔 A。 ¿_____ 你最喜欢动物吗? b. 你是母亲吗? C。 ¿_____ 研究? d. ¿_____ 是你吗? Yo soy de Estados Unidos。 e. ¿_____ libros tienes tú? F。 ¿_____ 你是我最好的朋友吗? G。 ¿_____ 是数学考试吗?是上午 8 点。