Как применить несколько масок к фрейму данных одновременно? - PullRequest
1 голос
/ 02 октября 2019

Я настроил три маски для моего df и хочу отфильтровать эти значения.

Например, некоторые случайные маски:

mask1 = df['column1'].isnull()
mask2 = df['column2'] > 5
mask3 = df['column3'].str.contains('hello')

Теперь, как мне объединить эти маски для фильтрации из этих значений? Это правильный путь? Используя и ~, и |?

masked_df = df[~mask1 | ~mask2 | ~mask3]

В моем фрейме данных столько строк, что я не могу быть уверен на 100% при ручной проверке, чтобы убедиться, что это правильно.

1 Ответ

4 голосов
/ 02 октября 2019

Ваше решение хорошо, но возможно также использовать побитовое AND и инвертировать цепочки условий:

masked_df = df[~(mask1 & mask2 & mask3)]

Если маски находятся в списке, решение выше переписывается с np.logical_and.reduce:

masks = [mask1, mask2, mask3]

m = df[~np.logical_and.reduce(masks)]
print (m)
   A  column1  column2 column3
2  c      4.0        9   hello
3  d      5.0        4   hello
4  e      5.0        2   hello
5  f      4.0        3   hello
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...