python-3.x - 它在 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
我应该在我的代码中更改什么?谢谢你!
解决方案
我们可以做的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
推荐阅读
- javascript - 如何在 HTML 画布中交换两个画布元素?
- powershell - 如何使用 power shell 更新 json 字符串
- python-3.x - 从 TFRobertaForSequenceClassification 获取错误的 logits 形状
- c++ - JSON后的奇怪字符
- java - 使用 java POI 动态传递单元格范围
- asp.net - 使用复选框向用户添加角色
- sql - 我对 SQL 完全陌生,无法回答考试中的简单问题
- c# - 如何在 WPF 中显示 webp 格式的图像?
- google-apps-script - 谷歌表格添加来自其他列的相应单元格的列单元格注释
- reactjs - ASP Net Core 和集成的 Windows 身份验证