скользящая средняя панда с скользящей маской / исключая записи - PullRequest
0 голосов
/ 18 мая 2018

У меня есть кадр данных pandas с таким индексом времени, как этот

import pandas as pd
import numpy as np

idx = pd.date_range(start='2000',end='2001')
df = pd.DataFrame(np.random.normal(size=(len(idx),2)),index=idx)

, который выглядит следующим образом:

                   0            1
2000-01-01  0.565524    0.355548
2000-01-02  -0.234161   0.888384

Я хотел бы вычислить скользящее среднее, например

df_avg = df.rolling(60).mean()

, но исключая всегда записи, соответствующие (скажем, 10 дням до + - 2 дня).Другими словами, для каждой даты df_avg должен содержать среднее (экспоненциальное с ewm или flat) предыдущих 60 записей, но исключая записи от t-48 до t-52.Полагаю, мне нужно сделать что-то вроде маски, но я не знаю как.Я мог бы также попытаться вычислить два отдельных средних и получить результат как разность, но он выглядит грязным, и мне интересно, есть ли лучший способ, который обобщает другие нелинейные вычисления ...

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Вы можете использовать apply для настройки вашей функции:

# select indexes you want to average over
avg_idx = [idx for idx in range(60) if idx not in range(8, 13)]

# do rolling computation, calculating average only on the specified indexes
df_avg = df.rolling(60).apply(lambda x: x[avg_idx].mean())

Применяемый x DataFrame всегда будет иметь 60 строк, поэтому вы можете указать свой позиционный индекс на основе этогозная, что первая запись (0) равна t-60.

Я не совсем уверен в вашей логике исключения, но вы можете легко изменить мое решение для вашего случая.

0 голосов
/ 18 мая 2018

К сожалению, нет.Исходный код панды:

df.rolling(window, min_periods=None, freq=None, center=False, win_type=None, 
           on=None, axis=0, closed=None)

window : int, or offset
    Size of the moving window. This is the number of observations used for
    calculating the statistic. Each window will be a fixed size.

    If its an offset then this will be the time period of each window. Each
    window will be a variable sized based on the observations included in
    the time-period.
...