Свести дневные события в недельные суммы и добавить 4-недельное скользящее среднее — как?
В df есть дневной столбец date и целочисленный счётчик events. Сверните его в недельные суммы (неделя заканчивается воскресеньем) и добавьте 4-недельное скользящее среднее этой недельной суммы.
import pandas as pd
def weekly_with_rolling(df: pd.DataFrame) -> pd.DataFrame:
# ваш код здесь
Напишите реализацию.
resample требует DatetimeIndex, поэтому сначала set_index('date'), затем resample('W')['events'].sum() даёт недельные суммы (неделя до воскресенья). Далее .rolling(4, min_periods=1).mean() — 4-недельное среднее. В отличие от groupby по номеру недели, resample заполняет пустые недели.
- ✗Звать
resampleбез DatetimeIndex и получать TypeError - ✗Группировать по номеру недели и терять недели без событий
- ✗Запускать
rollingпо дневным строкам, а не по недельной серии
- →Как переключить конец недели с воскресенья на понедельник?
- →Что меняет
min_periodsв начале окна rolling?
resample is a time-aware groupby: it needs a DatetimeIndex, buckets by the rule ('W' = week ending Sunday), and reindexes onto a complete calendar so empty weeks appear as 0. rolling(4) then averages the four most recent weekly totals.
import pandas as pd
def weekly_with_rolling(df: pd.DataFrame) -> pd.DataFrame:
weekly = df.set_index('date').resample('W')['events'].sum()
out = weekly.to_frame('events')
out['events_4w'] = out['events'].rolling(4, min_periods=1).mean()
return out
min_periods=1 averages what is available at the start instead of returning NaN for the first three weeks. Use resample('W-MON') to end weeks on Monday.