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'],
    }

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

因此,在这种情况下,所需的输出将是:
df1 = {
    'vouchers': [100, 300, 400],
    'units': [11, 12, 13],
    'some_other_data': ['a', 'c', 'd'],
    }

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

最佳答案

您可以使用 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

关于python - 如果在另一个数据框中找到其列值,则从数据框中删除一行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54149360/

10-12 22:26