从具有相等值的几个数据框中删除行
我有两个从几个 csv 文件中获得的数据框。例如:
df1
data1 data2 data3
0 cow cat 53
1 girl boy 12
2 monkey island 30
3 lucas arts 14
df2
data1 data2 data3
0 girl boy 50
1 cover disc 45
2 girl boy 47
3 pen pencil 15
4 book note 30
5 lucas arts 15
df2
data1 data2 data3
0 cover disc 45
1 pen pencil 15
2 book note 30
我想从 df2 中删除那些在 df1 中具有相同 data1 和 data2 值的行,这样最后我将得到一个更新的 df2。到目前为止,我已经完成了以下工作:
file1="fileA.csv"
file2="fileB.csv"
df1=pd.read_csv(file1)
df2=pd.read_csv(file2)
cond = df1[['data1','data2']].isin(df2[['data1','data2']])
df2.drop(df1[cond].index,inplace=True)
df2.to_csv("fileBUpdtated.csv",index=False)
但是我没有得到我需要的结果,我错过了什么?
回答
你需要 DataFrame.merge
cols = ['data1', 'data2']
df2 = df2.merge(df1[cols], on=cols, how='left', indicator=True)
.loc[lambda x: x._merge.ne('both')].drop('_merge', axis=1)
print(df2)
data1 data2 data3
1 cover disc 45
3 pen pencil 15
4 book note 30