Получение выборки из таблицы по нескольким условиям pandas/numpy

Есть таблица в формате csv, из неё нужно получить количество значений удовлетворяющих условию: в столбце TARGET равные нулю и в столбце значения MIP > 82, но меньше 84. Такое выражение не работает:

report[report.TARGET == 0] & report[report.MIP >= 82] & report[report.MIP <= 84]

Как сделать выборку по нескольким значениям?


Ответы (3 шт):

Автор решения: Pak Uula

Вам нужна функция np.logical_and. Эта функция принимает строго два аргумента, поэтому есть два варианта для конъюнкции трёх выражений:

вариант 1: report[np.logical_and(report.TARGET == 0, np.logical_and(report.MIP >= 82,report.MIP <= 84))]

вариант 2: report[np.logical_and.reduce((report.TARGET == 0, report.MIP >= 82,report.MIP <= 84))]

→ Ссылка
Автор решения: CrazyElf

Вот так вообще-то тоже должно работать:

report[(report.TARGET == 0) & (report.MIP >= 82) & (report.MIP <= 84)]

Обратите внимание на круглые скобки, они обязательны, иначе Pandas выдаёт ошибку, которая начинающим пандоводам непонятна.

→ Ссылка
Автор решения: MaxU

Лично я предпочитаю использовать "SQL-подобный" DataFrame.query(), потому, что код получается коротким и легкочитаемым:

res = report.query("""TARGET == 0 and 82 <= MIP <= 84""")
→ Ссылка