Панды: Как удалить строки из фрейма данных на основе списка кортежей, представляющих значения в ДВУХ столбцах? - PullRequest
0 голосов
/ 27 июня 2018

Это очень сильно связано с Выбор строк в DataFrame на основе значений списка в столбце в пандах , где вместо того, чтобы искать только ОДИН столбец, я хочу искать соответствующие кортежи в двух столбцах.

Воспроизводимый пример

import pandas as pd

df = pd.DataFrame([[1, 2, 'a'], [1, 3, 'b'], [1, 3, 'c'], [1, 4, 'b'], [1, 2, 'c'], [1, 7, 'c']])
df.columns = ['id1', 'id2', 'name']

print(df)

Пример кадра данных

    id1  id2 name
0    1    2    a
1    1    3    b
2    1    3    b
3    1    4    b
4    1    2    c
5    1    7    c

У меня есть список кортежей!

badTuples = [(1, 2), (1, 3), (1, 5)]

В первом элементе кортежей (1, 2); 1 используется для ссылки на значение в столбце 'id1', а 2 используется для ссылки на значение в столбце 'id2'.

Я хочу удалить такие строки, у которых есть соответствующие ('id1', 'id2') элементы кортежа! Иногда бывает так, что в списке кортежей есть пары (1, 5), которых нет в DataFrame! В моем примере у нас есть только (1, 2), (1, 3) and (1, 4) как id1, id2 пары в кадре данных!

В этом случае я хочу, чтобы эта пара (1, 5) была пропущена.

Выходной DataFrame должен быть:

    id1  id2 name
3    1    4    b
5    1    7    c

1 Ответ

0 голосов
/ 27 июня 2018

Использование:

df = df[~pd.Series(list(zip(df['id1'], df['id2']))).isin(badTuples)]

Или:

df = df[~df[['id1','id2']].apply(tuple, 1).isin(badTuples)]

print(df)
   id1  id2 name
3    1    4    b
5    1    7    c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...