Pandas удалить строки в одном кадре данных, которые имеют общее значение со строками в столбце другого кадра данных - PullRequest
4 голосов
/ 11 апреля 2020

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

 FID  g1    g2    g3
  0   19    20    13
  1   16    11    14
  2   15    20    11

и фрейм данных с именем x2:

 FID  g1   
  1   16  

Я хочу изменить x1, чтобы он не включал строку в x2:

 FID  g1    g2    g3
  0   19    20    13
  2   15    20    11

Я пробовал:

x1 = pd.concat([x1,x2]).drop_duplicates(keep=False)

, но думаю, что это работает, только если кадры данных имеют соответствующие схемы. Могу ли я просто сохранить строки в x1, которые не разделяют значения FID в x2?

Ответы [ 2 ]

2 голосов
/ 11 апреля 2020

Вы можете использовать pd.Series.isin для создания логической серии значений в столбце FID в x1, который появляется в столбце FID в x2.

Затем просто используйте pd.DataFrame.loc с оператором ~ для инвертирования логического ряда и выбора строк x1, значения которых в столбце FID не появляются в столбце FID x2:

cond = x1.FID.isin(x2.FID)
x1.loc[~cond] 
# output:
   FID  g1  g2  g3
0    0  19  20  13
2    2  15  20  11
0 голосов
/ 12 апреля 2020
x1.drop(x2['FID'])

выход

    FID  g1  g2  g3
 0    0  19  20  13
 2    2  15  20  11
...