Булево индексирование с несколькими условиями

У меня есть Pandas DF, где мне нужно фильтровать несколько строк, содержащих значения == 0 для функции 'a' и функции 'b'.

Чтобы проверить значения, я запускаю следующее:

DF1 = DF[DF['a'] == 0]

Возвращает правильные значения. Аналогичным образом, делая это:

DF2 = DF[DF['b'] == 0]

Я вижу значения 0 для функции 'b'.

Однако, если я попытаюсь объединить эти 2 в одной строке кода, используя операнд OR:

DF3 = DF[DF['a'] == 0 |  DF['b'] == 0]

Я получаю это:

TypeError: cannot compare a dtyped [float64] array with a scalar of type [bool]

Что здесь происходит?

Ответы

Ответ 1

Вы можете преобразовать любой столбец 'a' или 'b', чтобы они оба были либо float64, либо bool. Однако более простое решение, которое сохраняет тип данных ваших функций, заключается в следующем:

DF3 = DF[(DF['a'] == 0) | (DF['b'] == 0)]

Обычной операцией является использование логических векторов для фильтрации данных. Операторы: | для или, и для и, и ~ для нет. Они должны быть сгруппированы с помощью скобок.