如果在另一个数据框中找到其列值,则从数据框中删除一行

bar*_*icz 4 python dataframe pandas

df1 = {
    'vouchers': [100, 200, 300, 400],
    'units': [11, 12, 12, 13],
    'some_other_data': ['a', 'b', 'c', 'd'],
    }
df2 = {
    'vouchers': [500, 200, 600, 300],
    'units': [11, 12, 12, 13],
    'some_other_data': ['b', 'd', 'c', 'a'],
    }
Run Code Online (Sandbox Code Playgroud)

鉴于上面的两个数据帧,我想执行以下操作:如果df1可以在 中找到凭证 from df2,并且它们对应的单位相同,则从 中删除整个凭证行df1

因此,在这种情况下,所需的输出将是:

df1 = {
    'vouchers': [100, 300, 400],
    'units': [11, 12, 13],
    'some_other_data': ['a', 'c', 'd'],
    }
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳方法是什么?

cs9*_*s95 5

您可以使用索引操作有效地执行此操作pd.Index.isin

u = df1.set_index(['vouchers', 'units'])
df1[~u.index.isin(pd.MultiIndex.from_arrays([df2.vouchers, df2.units]))]

   vouchers  units some_other_data
0       100     11               a
2       300     12               c
3       400     13               d
Run Code Online (Sandbox Code Playgroud)