Получить среднее значение последних N дней недели для фрейма данных pandas
Предположим, что мои данные-это ежедневные подсчеты и имеют в качестве индекса столбец DateTimeIndex. Есть ли способ получить среднее значение за последние n дней недели? Например, если дата-воскресенье 15 августа, я хотел бы получить среднее количество отсчетов (воскресенье 8 августа, воскресенье 1 августа, ...).
Я начал использовать панд вчера, так что вот что я грубо заставил.# df is a dataframe with an DateTimeIndex
# brute force for count last n weekdays, wherelnwd = last n weekdays
def lnwd(n=1):
lnwd, tmp = df.shift(7), df.shift(7) # count last weekday
for i in xrange(n-1):
tmp = tmp.shift(7)
lnwd += tmp
lnwd = lnwd/n # average
return lnwd
Должен быть один лайнер? Есть ли способ использовать apply()
(без передачи функции, имеющей цикл for? так как n
переменная) или какая-то форма groupby
? Например, найти среднее значение всех данных по каждому дню недели можно следующим образом:
df.groupby(lambda x: x.dayofweek).mean() # mean of each MTWHFSS
1 ответ:
Я думаю, что вы ищете прокатку применить (прокатка означает в данном случае)? Смотрите документы: http://pandas.pydata.org/pandas-docs/stable/computation.html#moving-rolling-statistics-moments но затем применяется для каждого дня недели отдельно, это может быть достигнуто путем комбинирования
rolling_mean
с группировкой по будням сgroupby
.Это должно дать что-то вроде (с серией
s
):s.groupby(s.index.weekday).transform(lambda x: pd.rolling_mean(x, window=n))