3

我一直在阅读有关 rolling() 函数的文档,但我似乎找不到同时合并前向和后向窗口的方法。我想要做的是计算前 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,所以我不能这样做。有没有人有更强大的方法来使用滚动函数进行这样的计算?感觉必须使用某种移位功能。

感谢您对此的帮助。

4

1 回答 1

4

你可以做这样的事情

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

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

来自 Pandas文档

于 2018-09-23T21:59:37.147 回答