Pandas - как вычислить скользящее вперед 10 / назад 10 среднее абсолютное отклонение? - PullRequest
0 голосов
/ 19 мая 2018

Я читал документацию по функции roll () и, похоже, не могу найти способ одновременного включения как прямого, так и обратного окон.То, что я хочу сделать, - это вычислить среднее абсолютное отклонение (или даже стандартное отклонение) форвардных 10 и последних 10 событий для анализа выбросов.

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

df = pd.DataFrame({ 'date': pd.date_range(start='1/1/2017', end='12/31/2017'),
        'value': np.random.rand(365)})

first_10 = df.rolling(window=10, win_type='triang')['value'].mean().shift().reset_index()

last_10 = df[::-1].rolling(window=10, win_type='triang')['value'].mean().shift().reset_index()

, а затем

pd.merge(first_10, last_10, on = ['level_1']).set_index(['level_1']).mean(axis=1)

Но потому что вы не можете простов среднем два MAD вместе, чтобы получить MAD для этого окна, я не могу этого сделать.У кого-нибудь есть более надежный способ использовать функцию прокрутки для таких вычислений?Чувствуется, что должно быть далеко, используя какую-то функцию сдвига.

Оцените помощь по этому вопросу.

1 Ответ

0 голосов
/ 24 сентября 2018

Вы можете сделать что-то вроде этого

mad = lambda x: np.fabs(x - x.mean()).mean()

s.rolling(window=60).apply(mad, raw=True).plot(style='k')

Из Pandas Документация

...