ССобесов
08 июня 2026 г.

Python и pandas на собесе аналитика в 2026: типичные задачи

Гид по Python/pandas-секции собеса аналитика: groupby, pivot, merge, sessionization, retention, оптимизация. С реальными задачами для тренировки.

Python и pandas на собесе — когда их спрашивают

В 2026 году Python-секция на собесе аналитика встречается всё чаще. Если в SQL-only компаниях (классические банки, ритейл) её ещё могут пропустить, то в продуктовых командах Яндекса, Авито, Озона, Wildberries, Wargaming, Lamoda — почти всегда. И, что важно: pandas-задачи редко бывают «лёгкими». Часто это то же самое, что и в SQL, но с дополнительной заковыкой — нужно вспомнить, как сделать groupby с агрегацией.

В этой статье:

  • какие темы спрашивают на Python-секции;
  • 8 типов pandas-задач, которые встречаются чаще всего;
  • общие Python-вопросы (типы данных, генераторы, lambda);
  • задачи на оптимизацию;
  • план подготовки;
  • литература и типичные ошибки.

Структура Python-секции

В большинстве собесов Python — это одна задача на 30–45 минут. Возможны варианты:

  • Чисто pandas-задача: загрузили DataFrame, нужно посчитать метрику.
  • Pandas + базовый Python: задача требует и работы с DataFrame, и логики (генератор, словарь).
  • Алгоритмическая задача на чистом Python: без pandas, типа LeetCode easy.
  • Live coding: пишете код в редакторе с расшариванием экрана.

Опасный момент — компания может молча ждать «pandas-way», а вы напишете цикл for и потеряете балл за не-векторизованный код.

8 типов pandas-задач

1. groupby + agg

Базовая операция. «Средний чек по категории, средний чек по сегменту, средний чек по месяцу». Используется df.groupby('cat').agg({'amount': 'mean'}).

Чуть сложнее: мультигруппировка с несколькими агрегатами:

df.groupby(['region', 'month']).agg(
    total=('amount', 'sum'),
    avg_check=('amount', 'mean'),
    n_orders=('order_id', 'nunique')
)

Тренировка: Habr · groupby + agg.

2. pivot_table

«Месячная выручка по категориям, каждый месяц колонкой». Используется pivot_table с агрегатором.

Часто за этим следует unpivot (melt) — обратная операция, когда нужно «развернуть» wide-формат в long.

Тренировка: Habr · pivot_table, Datainterview · unpivot/melt, LeetCode · pivot revenue by region.

3. merge / join

pd.merge — основной инструмент. Важно понимать разницу между inner, left, right, outer, плюс merge_asof для временных join-ов.

Тренировка: Habr · merge vs join, LeetCode · merge_asof по времени.

4. sessionization

«Сгруппировать события пользователя в сессии: если между событиями прошло > 30 минут — новая сессия». Решается через groupby + diff + cumsum:

df = df.sort_values(['user_id', 'ts'])
df['gap'] = df.groupby('user_id')['ts'].diff() > pd.Timedelta('30min')
df['session_id'] = df.groupby('user_id')['gap'].cumsum()

Тренировка: Python · Воронка из событий, Python · Объединение перекрывающихся событий.

5. retention (когортный анализ)

«Построить retention curve по когортам месяца регистрации». Это самая частая «сложная» задача на собесе. Шаги:

  1. Определить когорту (дата регистрации).
  2. Для каждого активного события посчитать months_since_registration.
  3. Pivot: cohort × month.

Тренировка: Karpov · Retention curve в pandas.

6. funnel conversion

«Конверсия по этапам воронки». Решается через серию фильтраций + подсчёт unique users:

n_search = df[df.event == 'search']['user_id'].nunique()
n_cart = df[df.event == 'add_to_cart']['user_id'].nunique()
n_order = df[df.event == 'order']['user_id'].nunique()

Тренировка: InterviewQuery · pandas funnel conversion.

7. fillna и работа с пропусками

«Заполнить пропуски значением, последним непустым, средним, медианой». Различные стратегии:

  • df.fillna(0) — нулём;
  • df.fillna(method='ffill') — предыдущим;
  • df.fillna(df.mean()) — средним.

Внутри groupby — нужен df.groupby('user').transform(lambda s: s.fillna(method='ffill')). Тренировка: Habr · fillna стратегии, LeetCode · forward fill в группе.

8. RFM-сегментация в pandas

«Разбить пользователей на квантили по Recency, Frequency, Monetary». Используется pd.qcut для квантилей.

Тренировка: InterviewQuery · RFM в pandas.

Базовые Python-вопросы

Series vs DataFrame

«В чём разница, когда какой использовать.» Series — это одномерный объект (как колонка); DataFrame — двумерный. Часто df['col'] возвращает Series, а df[['col']] — DataFrame с одной колонкой.

Тренировка: Habr · Series vs DataFrame.

Mutable default arguments

Классический Python-подвох:

def foo(items=[]):
    items.append(1)
    return items

Каждый раз при вызове foo() без аргументов список НЕ создаётся заново — он один и тот же. Тренировка: Habr · mutable default arg.

List comprehension vs map

«Что быстрее? Что читабельнее?» Обычно list comprehension читабельнее, а map — слегка быстрее для простых функций.

Тренировка: Habr · list comp vs map.

Итераторы и генераторы

yield, ленивая оценка, как написать свой генератор. Senior-вопрос: чем отличается итератор от генератора.

Тренировка: Python · итератор vs генератор.

Алгоритмические задачи

На собесе аналитика они проще, чем у бэкенда, но могут встретиться:

Оптимизация: vectorize vs loop

На middle/senior собесе обязательно спросят: «вот цикл for, как сделать его быстрее?» Обычные ответы:

  1. Векторизация: вместо for row in df.iterrows() использовать df['col1'] + df['col2'].
  2. apply — медленнее векторизации, но быстрее iterrows.
  3. numpy для тяжёлых математических операций.
  4. groupby + transform вместо явных циклов.

Тренировка: Habr · iterrows vs vectorize.

Прочие частые задачи

Rolling mean и аномалии

«Найти аномальные точки через скользящее среднее». Тренировка: Habr · rolling mean.

Group by месяцам

«Помесячная агрегация продаж.» Тренировка: LeetCode · group by month.

Top-N в группе

«Топ-3 продукта в каждой категории.» Тренировка: LeetCode · top-N per group.

Чек-лист подготовки на 3 недели

Неделя 1: pandas основы

Неделя 2: продуктовые pandas-задачи

Неделя 3: Python теория и оптимизация

Что почитать

  1. «Python for Data Analysis» Wes McKinney — каноническая книга по pandas от автора библиотеки.
  2. «Fluent Python» Luciano Ramalho — для понимания Python-механики.
  3. Курс «Симулятор аналитика» Karpov.Courses — много pandas-практики.
  4. Документация pandas — особенно раздел «Group By: split-apply-combine».

Типичные ошибки

  1. Пишут циклы для DataFrame. В pandas почти всегда есть векторизованное решение.
  2. Путают .loc и .iloc. .loc — по меткам, .iloc — по позициям.
  3. Меняют DataFrame в цикле. Получают SettingWithCopyWarning и багов.
  4. Используют apply где можно agg. Apply медленнее.
  5. Не помнят про index_reset. После groupby/pivot часто индекс ломается.
  6. Забывают про merge_asof. Для временных join-ов это спасение.
  7. Не знают, что df['col'] копия или ссылка. Это причина 70% багов в pandas.

Топ-инсайт: типы данных

Pandas хранит числа в int64 или float64, строки — в object. Если у вас миллион строк типа object — это очень медленно. На большие данные нужно использовать category для строковых колонок с малой кардинальностью.

На сеньорном собесе про это могут спросить.

Связанные задачи каталога

Полный пул для тренировки:

Несколько хитрых паттернов pandas

merge_asof для «ближайшего по времени»

Если вам нужно склеить две таблицы, где даты не совпадают точно (например, события и метеорологические измерения по часу), pd.merge_asof спасает. Поддерживает direction='backward'/'forward'/'nearest'.

transform vs apply vs aggregate

  • agg — сжимает группу до одной строки.
  • transform — возвращает строку для каждой исходной строки, в её размер.
  • apply — самый гибкий, но самый медленный.

Понимание разницы — must-have для middle.

shift и diff внутри groupby

«Разница между текущей и предыдущей покупкой пользователя»:

df['days_diff'] = df.groupby('user_id')['order_date'].diff().dt.days

Это эквивалент LAG в SQL, и спрашивают очень часто.

qcut и cut для квантилей

pd.qcut(s, 4) — четыре равных по числу наблюдений квантиля. pd.cut(s, bins=[0, 100, 1000, 10000]) — по фиксированным границам. Для RFM используется первый.

explode для списков

Если в одной ячейке лежит список (например, tags), df.explode('tags') разворачивает в отдельные строки. Очень полезно для JSON-данных.

Python-секция в разных компаниях

Стиль Python-секции зависит от компании:

  • Яндекс: ближе к алгоритмам, pandas попроще.
  • Авито: pandas + бизнес-кейс в одном задании.
  • Озон: classic pandas, sessionization и retention.
  • Wildberries: много задач на оптимизацию (большие объёмы данных).
  • Тинькофф: pandas редко спрашивают, чаще SQL.

Зная это, можно настраивать подготовку под конкретный собес.

Пара хитростей для live-coding

  1. Импорты в начале. Не забудьте import pandas as pd и import numpy as np в первой ячейке.

  2. Проверяйте промежуточные результаты. print(df.head()) после каждого шага — нормально, и интервьюеру это нравится.

  3. Если зависли — проговаривайте план. «Сейчас я хочу сделать join, потом groupby, потом filter» — даже если код не пишется, интервьюер видит мышление.

  4. Не стесняйтесь спросить про размер данных. «Это 100 строк или 100 миллионов?» — определяет, нужна ли оптимизация.

Итого

Python/pandas — это секция, где «механика» важнее «глубоких знаний». Если вы знаете 10 основных операций (groupby, merge, pivot, melt, fillna, sort, cumsum, diff, transform, agg) и понимаете, когда какую использовать — 80% задач сделаете. Остальные 20% — это специфика (sessionization, retention, оптимизация), которой тренироваться по 3 недели. После этого pandas-секцию на любом собесе вы пройдёте уверенно.

Связанные задачи

Другие статьи