df[df['channel'].isin(['ads', 'referral'])]
Результат:
order_id channel amount 1 1002 ads 1200 3 1004 referral 800
df[~df['user_id'].isin([501, 777])]
Результат:
order_id user_id channel 1 1002 502 ads 3 1004 503 email
df['channel'].isin(['ads', 'email']).sum()
Результат:
4Порешать Python-задачи в тренажёре →
Прямой аналог SQL IN — просят, когда нужно отфильтровать по справочнику id или категорий. Идёт в паре с ~ для NOT IN и с .query('x in @list'); на собесе проверяют, что ты не пишешь длинную цепочку == ... | ... == ....
Инвертируй маску тильдой: df[~df['channel'].isin(['ads'])]. Оператор ~ поэлементно отрицает булев Series, в отличие от Python not, который тут не работает. Скобки вокруг isin() обязательны из-за приоритета операций.
isin() быстрее и читабельнее уже на трёх-четырёх значениях: внутри используется хеш-таблица, а не цепочка сравнений. Добавить значение в список проще, чем дописывать ещё одно == с |. Для двух значений разница незаметна.
Потому что isin() сравнивает с учётом типа: число 1 не равно строке '1'. Приведи типы заранее — df['col'].astype(str).isin(['1']) — или передавай значения того же типа, что в колонке. Смешанные типы в колонке — частый источник таких ошибок.
groupby · merge · pivot_table · apply · value_counts · drop_duplicates
Открыть Python-тренажёр (556 задач) →