从具有相等值的几个数据框中删除行

我有两个从几个 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


以上是从具有相等值的几个数据框中删除行的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>