Как исключить строки путем определения значений из двух столбцов? - PullRequest
2 голосов
/ 06 ноября 2019

У меня есть два фрейма данных:

df1:

 X1  X2   X3
  1   2  100
  2   3   90
  1   3  100
  3   1  110
  2   1   20
  1   3   30
  2   3   40
  3   1   50

df2:

 X1  X2   X3  Y
  1   2  100  1
  2   3   90  1
  1   3  100  1
  3   1  110  0
  2   1   20  0
  1   3   30  0
  2   3   40  1
  3   1   50  0

Я хочу исключить строки из df1 для тех, у кого естьзначение 1 в столбце Y в df2. Идентификатор (X1, X2).

Ожидаемый результат:

 X1  X2   X3
  3   1  110
  2   1   20
  3   1   50

1 Ответ

1 голос
/ 06 ноября 2019

Создайте DataFrame путем фильтрации по столбцу Y и удалите дубликаты во избежание дублирования строк в выводе:

df3 = df2.loc[df2['Y'].eq(1), ['X1','X2']].drop_duplicates()
print (df3)
   X1  X2
0   1   2
1   2   3
2   1   3

Затем используйте левое соединение с параметром indicator=True в DataFrame.merge и фильтр left_only строк:

df = df1.merge(df3, indicator=True, how='left').query('_merge =="left_only"').drop('_merge',1)
print (df)
   X1  X2   X3
3   3   1  110
4   2   1   20
7   3   1   50
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...