Получить среднее значение последних 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 4

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))