根据关键列值pandas将一个数据框中的行与另一个数据框中的行进行匹配

时间:2020-08-05 13:42:34

标签: python pandas dataframe

我有两个数据帧(A和B),分别代表事务的两侧,每行分别具有m行和n行。有一些关键列可唯一标识这些交易。我需要找到row_in_A和row_in_B,以使这些关键列对于两者是相等的,其余的列无关紧要。然后,我需要从相应的dfs中删除这些行。

之前:

在A:

Seller | Buyer | Side A
----------------------
  X    |   Y   | True
  C    |   D   | True

在B:

Seller | Buyer | Side B
----------------------
  X    |   Y   | True

假设键列仅是卖方和买方,则这些行应匹配,然后从A和B中删除。这些列可以/将在两个df中包含重复的条目。

之后:

Seller | Buyer | Side A
----------------------
  C    |   D   | True

我该怎么做?

1 个答案:

答案 0 :(得分:1)

SellerBuyer列创建MultiIndex,然后使用MultiIndex.isin创建布尔掩码,使用此掩码过滤行。:

i1 = pd.MultiIndex.from_arrays([df1['Seller'], df1['Buyer']])
i2 = pd.MultiIndex.from_arrays([df2['Seller'], df2['Buyer']])

df1, df2 = df1[~i1.isin(i2)], df2[~i2.isin(i1)]

使用DataFrame.set_index的相似想法:

i1 = df1.set_index(['Seller', 'Buyer']).index
i2 = df2.set_index(['Seller', 'Buyer']).index

df1, df2 = df1[~i1.isin(i2)], df2[~i2.isin(i1)]

结果:

print(df1)
  Seller Buyer  Side A
1      C     D    True