Булево индексирование с несколькими условиями
У меня есть 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)]
Обычной операцией является использование логических векторов для фильтрации данных. Операторы: | для или, и для и, и ~ для нет. Они должны быть сгруппированы с помощью скобок.