Выбор ответа Senior Окна и сдвиги обновлено
rolling в группах и MultiIndex
Вопрос
Присвоение df["ma3"] = df.groupby("user")["amount"].rolling(3).mean() дало ошибку или NaN. Почему и как исправить?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: У результата MultiIndex (user, индекс): сбросить уровень или transform. groupby().rolling() возвращает Series с индексом (user, исходный индекс).
Варианты ответа
groupbyне поддерживаетrolling, нужен цикл по группам- Нужно сначала вызвать
reset_index()уdf, и тогда индексы совпадут сами - У результата MultiIndex
(user, индекс): сбросить уровень илиtransformправильный ответ rollingв группах работает только с датами в индексе, а не с номерами строк
Разбор
groupby().rolling() возвращает Series с индексом (user, исходный индекс). Чтобы присвоить в колонку, первый уровень нужно сбросить, тогда индекс совпадёт с df. Другой путь: df.groupby("user")["amount"].transform(lambda x: x.rolling(3).mean()). Rolling в группах поддерживается и работает с любым индексом, а reset_index у df проблему не решит.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.