让我说我有一个像这样的数据:
df1:
col1 col2
0 data1 math
1 data1 math2
2 data2 math
3 data3 math
4 data4 math2
df2:
col1 col2
0 data1 math
1 data1 math2
2 data1 math3
3 data2 math2
4 data3 math
5 data4 math2
6 data4 math3如何基于col1和col2比较这两种数据格式,并得到区别(删除与df1匹配的所有行),并获得如下数据:
col1 col2
0 data1 math3
1 data2 math2
2 data4 math3我试过这个,但没有用:
df3 = df2[~(df2['col2'].isin(df1['col2']))].reset_index(drop=True)发布于 2021-12-20 14:14:09
您的解决方案应该通过比较MultiIndex或元组来更改:
df3 = df2[~df2.set_index(['col1','col2']).index.isin(df1.set_index(['col1','col2']).index)].reset_index(drop=True)
df3 = df2[~df2[['col1','col2']].apply(tuple, 1).isin(df1[['col1','col2']].apply(tuple, 1))].reset_index(drop=True)发布于 2021-12-20 14:15:05
您可以使用indicator=True执行合并,并且只保留right_only行:
(df1.merge(df2, on=['col1', 'col2'], how='outer', indicator=True)
.query('_merge == "right_only"')
.drop(columns='_merge').reset_index(drop=True)
)产出:
col1 col2
0 data1 math3
1 data2 math2
2 data4 math3https://stackoverflow.com/questions/70423100
复制相似问题