Вопрос с собеседования · Аналитика данных

Как работать с временными рядами в pandas — ресемплинг, скользящие окна, сдвиги?

MiddlePython и pandas
Ещё спрашивают так:
  • Что делает resample в pandas?
  • Как посчитать скользящее среднее в pandas?
Коротко

Индекс — DatetimeIndex (pd.to_datetime и set_index). resample("D") меняет частоту с агрегатом (события → сумма по дням, дни → недели). rolling(7) — скользящее окно (среднее за 7 последних точек; с индексом времени — rolling("7D")). shift(n) — сдвиг на n периодов, основа лаговых признаков. diff и pct_change — изменения. Часовые пояса — tz_localize / tz_convert.

  • Пропущенные дни после resample — NaN; заполнять осознанно (0 для продаж, ffill для цен)
  • Признак без утечки: rolling по сдвинутому ряду — shift(1).rolling(7)
  • groupby("store").resample(...) — ресемплинг по каждому ряду

А ещё Ряд должен быть отсортирован по времени, иначе окна считаются неверно

Подробно

Пример: дневные продажи и признаки для прогноза.

df["ts"] = pd.to_datetime(df["ts"])
daily = (df.set_index("ts")
           .groupby("store")["amount"]
           .resample("D").sum()
           .reset_index())
g = daily.groupby("store")["amount"]
daily["lag_7"] = g.shift(7)
daily["mean_7"] = g.transform(lambda s: s.shift(1).rolling(7).mean())
daily["dow"] = daily["ts"].dt.dayofweek

Утечка горизонта. Если прогноз делается на 7 дней вперёд, все признаки должны использовать данные не позже дня прогноза: лаг меньше горизонта для дальних дней уже недоступен.

Что хотят услышать

  • DatetimeIndex, resample, rolling, shift.
  • Заполнение пропусков после ресемплинга.
  • Лаговые признаки без утечки.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗rolling(7).mean() без сдвига — безопасный признак: окно ведь состоит из прошлых значений
  • ✓resample меняет частоту, rolling — скользящее окно, shift — лаги; признаки строят по сдвинутому ряду
  • ✗resample работает с любым индексом, DatetimeIndex не нужен
  • ✗Пропуски после resample всегда нужно заполнять нулями

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования