df.query('amount > 1000 and channel == "ads"')
Результат:
order_id user_id channel amount date 2 1003 501 ads 1500 2026-01-03 5 1006 777 ads 2100 2026-01-06
vip = [501, 777]
df.query('user_id in @vip')
Результат:
order_id user_id channel amount date 0 1001 501 email 450 2026-01-01 2 1003 501 ads 1500 2026-01-03 5 1006 777 ads 2100 2026-01-06
df.query('`gross amount` >= 1000')
Результат:
order_id gross amount 2 1003 1500 5 1006 2100Порешать Python-задачи в тренажёре →
Спрашивают в паре с булевой индексацией df[df['x']>0]: интервьюер проверяет, понимаешь ли ты, что query() — синтаксический сахар и что для внешних переменных нужен @. Хорошо идёт вместе с .eval() и цепочками .pipe().
Результат тот же, но query() принимает условие строкой и читается компактнее, особенно при нескольких условиях. Маска не требует numexpr и быстрее на маленьких данных. На больших числовых DataFrame query() может выигрывать за счёт движка numexpr.
Поставь @ перед именем: df.query('user_id in @vip'). Без @ pandas будет искать колонку с именем vip и упадёт с UndefinedVariableError. Через @ можно подставлять списки, числа, строки и другие объекты.
Да, через inplace=True, но это не рекомендуется — pandas постепенно отказывается от inplace, и код на цепочках надёжнее. Обычно просто присваивают результат: df = df.query(...).
groupby · merge · pivot_table · apply · value_counts · drop_duplicates
Открыть Python-тренажёр (556 задач) →