我正在计算基于时间的 EWMA,定义如下:
地点:
在以下示例数据框 df 上:
index time x
0 1 5
1 1.3 4
2 1.4 8
3 2.8 3
例如,在时间 3:
我知道在Python中我们可以使用df['ewma'] = df['x'].ewm(alpha = c)
来计算简单的ewma,但是这里c
只能是固定 float 。
我的问题是:如何处理更改参数 c?我可以递归地迭代整个 df 来获得答案,但它看起来确实很简单。
关于如何解决这个问题有什么建议吗?预先感谢您!
最佳答案
使用shift()
如果我没看错的话,基本上你需要时间[x]和时间[x-1]来解决你的问题。
只需创建一个新列:
df['time_prev'] = df['time'].shift(1)
print(df)
index time x time_prev
0 0 1.0 5 NaN
1 1 1.3 4 1.0
2 2 1.4 8 1.3
3 3 2.8 3 1.4
然后您可以使用 time_prev 作为计算中的前一个值。例如,您可以通过增加 .shift(3) 将其调整为较旧的值。
关于python-3.x - 如何构建基于时间的 EWMA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55979324/