Сопоставление строк в одном фрейме данных с другим на основе значений ключевых столбцов pandas - PullRequest
1 голос
/ 05 августа 2020

У меня есть два фрейма данных (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. Столбцы могут / будут содержать повторяющиеся записи в обоих dfs.

После:

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

Как мне это сделать?

1 Ответ

1 голос
/ 05 августа 2020

Создайте MultiIndex из столбцов Seller и Buyer, затем используйте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...