首页 > 解决方案 > 它在 DF1 中而不在 DF 中,但仅匹配特定列

问题描述

当 IP 和 ID 与 df 中的不同时,我想显示的是来自 df1 的所有数据。这是我的代码:

import pandas as pd 
import openpyxl

df = pd.DataFrame ({
    'IP':['1.1.1.1','2.2.2.2','3.3.3.3'],
    'ID':['101','202','303'],
    'Name':['atlas','amida','ubuntu']
    })

df1 = pd.DataFrame ({
    'IP':['1.1.1.1','2.2.2.2','3.3.3.3','4.4.4.4','5.5.5.5'],
    'ID':['101','202','303','404','505'],
    'Name':['atlas','amida','ubuntu','canvas','smash'],
    'Installed':['yes','no','yes','no','yes'],
    'Price':[100,200,300,400,500]
    })
print(df)
print(df1)
print(df1[~df1.isin(df)].dropna(how = 'all'))
---------------------------------------------------------------------------------------------------------
DF
        IP   ID    Name
0  1.1.1.1  101   atlas
1  2.2.2.2  202   amida
2  3.3.3.3  303  ubuntu

DF1
        IP   ID    Name Installed  Price
0  1.1.1.1  101   atlas       yes    100
1  2.2.2.2  202   amida        no    200
2  3.3.3.3  303  ubuntu       yes    300
3  4.4.4.4  404  canvas        no    400
4  5.5.5.5  505   smash       yes    500

我的结果。(一个坏的)

        IP   ID    Name Installed  Price
0      NaN  NaN     NaN       yes    100
1      NaN  NaN     NaN        no    200
2      NaN  NaN     NaN       yes    300
3  4.4.4.4  404  canvas        no    400
4  5.5.5.5  505   smash       yes    500

预期的结果(好的结果)。

        IP   ID    Name Installed  Price
3  4.4.4.4  404  canvas        no    400
4  5.5.5.5  505   smash       yes    500

我应该在我的代码中更改什么?谢谢你!

标签: python-3.xpandas

解决方案


我们可以做的merge

s=df1.merge(df,indicator=True,how='left').loc[lambda x : x['_merge']=='left_only']
 # .drop('_merge',1)
        IP   ID    Name Installed  Price     _merge
3  4.4.4.4  404  canvas        no    400  left_only
4  5.5.5.5  505   smash       yes    500  left_only

推荐阅读