Выбор ответа Senior Окна и сдвиги обновлено

rolling в группах и MultiIndex

Вопрос

Присвоение df["ma3"] = df.groupby("user")["amount"].rolling(3).mean() дало ошибку или NaN. Почему и как исправить?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: У результата MultiIndex (user, индекс): сбросить уровень или transform. groupby().rolling() возвращает Series с индексом (user, исходный индекс).

Варианты ответа

  1. groupby не поддерживает rolling, нужен цикл по группам
  2. Нужно сначала вызвать reset_index() у df, и тогда индексы совпадут сами
  3. У результата MultiIndex (user, индекс): сбросить уровень или transformправильный ответ
  4. rolling в группах работает только с датами в индексе, а не с номерами строк

Разбор

groupby().rolling() возвращает Series с индексом (user, исходный индекс). Чтобы присвоить в колонку, первый уровень нужно сбросить, тогда индекс совпадёт с df. Другой путь: df.groupby("user")["amount"].transform(lambda x: x.rolling(3).mean()). Rolling в группах поддерживается и работает с любым индексом, а reset_index у df проблему не решит.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.