如何构造基于时间的EWMA

时间:2019-05-04 03:59:18

标签: python-3.x pandas moving-average

我正在计算定义的基于时间的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以获得答案,但这似乎并不复杂。

有关如何解决此问题的任何建议?预先谢谢你!

1 个答案:

答案 0 :(得分:0)

使用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)作为示例将其调整为较旧的值。