gpt4 book ai didi

python - 在 pandas 数据帧上创建滚动自定义 EWMA

转载 作者:行者123 更新时间:2023-11-30 22:51:56 29 4
gpt4 key购买 nike

我正在尝试创建一个滚动 EWMA,其 df 的最后 13 个值的衰减= 1-ln(2)/3 如下:

factor
Out[36]:
EWMA
0 0.043
1 0.056
2 0.072
3 0.094
4 0.122
5 0.159
6 0.207
7 0.269
8 0.350
9 0.455
10 0.591
11 0.769
12 1.000

我的月度返回如下:

change.tail(5)
Out[41]:

date
2016-04-30 0.033 0.031 0.010 0.007 0.014 -0.006 -0.001 0.035 -0.004 0.020 0.011 0.003
2016-05-31 0.024 0.007 0.017 0.022 -0.012 0.034 0.019 0.001 0.006 0.032 -0.002 0.015
2016-06-30 -0.027 -0.004 -0.060 -0.057 -0.001 -0.096 -0.027 -0.096 -0.034 -0.024 0.044 0.001
2016-07-31 0.063 0.036 0.048 0.068 0.053 0.064 0.032 0.052 0.048 0.013 0.034 0.036
2016-08-31 -0.004 0.012 -0.005 0.009 0.028 0.005 -0.002 -0.003 -0.001 0.005 0.013 0.003

我只是尝试将这个滚动 EWMA 应用于每一列。我知道 pandas 有 EWMA 方法,但我不知道如何传递正确的 1-ln(2)/3 因子。

帮助将不胜感激!谢谢!

最佳答案

@piRSquared 的答案是一个很好的近似值,但最后 13 个之外的值也有权重(尽管很小),所以它并不完全正确。

pandas 可以进行滚动窗口计算。然而,在它支持的所有滚动函数中,ewm 并不是其中之一,这意味着我们必须实现自己的滚动函数。

假设series是我们要平均的时间序列:

from functools import partial
import numpy as np

window = 13
alpha = 1-np.log(2)/3 # This is ewma's decay factor.
weights = list(reversed([(1-alpha)**n for n in range(window)]))
ewma = partial(np.average, weights=weights)
rolling_average = series.rolling(window).apply(ewma)

关于python - 在 pandas 数据帧上创建滚动自定义 EWMA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38836482/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com