Получение выборки из таблицы по нескольким условиям pandas/numpy
Есть таблица в формате csv, из неё нужно получить количество значений удовлетворяющих условию: в столбце TARGET равные нулю и в столбце значения MIP > 82, но меньше 84. Такое выражение не работает:
report[report.TARGET == 0] & report[report.MIP >= 82] & report[report.MIP <= 84]
Как сделать выборку по нескольким значениям?
Ответы (3 шт):
Вам нужна функция 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))]
Вот так вообще-то тоже должно работать:
report[(report.TARGET == 0) & (report.MIP >= 82) & (report.MIP <= 84)]
Обратите внимание на круглые скобки, они обязательны, иначе Pandas выдаёт ошибку, которая начинающим пандоводам непонятна.
Лично я предпочитаю использовать "SQL-подобный" DataFrame.query(), потому, что код получается коротким и легкочитаемым:
res = report.query("""TARGET == 0 and 82 <= MIP <= 84""")