首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >eviews和Python中的移动平均值

eviews和Python中的移动平均值
EN

Stack Overflow用户
提问于 2019-08-21 11:17:04
回答 1查看 399关注 0票数 0

我想问一下,在做时间序列中的移动平均模型时,趋势分析,当我们在eview中做移动平均时,我们做一些类似于下面的代码

代码语言:javascript
复制
moving average = @movavc(data, n)

然而,在python中,我们将执行如下操作:

代码语言:javascript
复制
data["mov_avc"] = data.rolling(window=n).mean()

当在eview中做简单的移动平均时,我们首先损失,但最后几次观察,在python中,我们只会失去第一次观测。

是怎么回事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-21 11:37:02

如果我正确地回答了您的问题,您想了解为什么在python中执行窗口大小的移动平均值n不会丢失最后几个点。

查看pandas.rolling() 文档,您可以看到下面的注释:

默认情况下,结果设置为窗口的右侧。可以通过设置center=True将其更改为窗口的中心。

这意味着滚动窗口在默认情况下并不以计算平均值的值为中心。

让我们来看看这个例子是如何工作的。

我们有一个简单的DataFrame:

代码语言:javascript
复制
In [2]: ones_matrix = np.ones((5,1))
   ...: ones_matrix[:,0] = np.array([i+1 for i in range(ones_matrix.shape[0])])
   ...: index = [chr(ord('A')+i) for i in range(ones_matrix.shape[0])]
   ...: df = pd.DataFrame(data = ones_matrix,columns=['Value'],index=index)
   ...: df
Out[2]:
   Value
A    1.0
B    2.0
C    3.0
D    4.0
E    5.0

现在让我们滚动大小为3的窗口。(注意,我显式地编写了参数center=False,但这是调用df.rolling()的默认值)

代码语言:javascript
复制
In [3]: rolled_df = df.rolling(window=3,center=False).mean()
   ...: rolled_df
Out[3]:
   Value
A    NaN
B    NaN
C    2.0
D    3.0
E    4.0

前两行是NaN,而最后一点仍然在那里。例如,如果在带有索引C的行中注意到,滚动后的值是2。但在3之前。这意味着该索引的新值是将值分别为{1,2,3}的索引{A、B、C}的行平均值的结果。

因此,在计算该位置的平均值时,可以看到窗口不是以指数C为中心,而是以指数B为中心。

您可以通过设置centered=True,从而输出预期的行为来改变这一点:

代码语言:javascript
复制
In [4]: centred_rolled_df = df.rolling(window=3,center=True).mean()
   ...: centred_rolled_df
Out[4]:
   Value
A    NaN
B    2.0
C    3.0
D    4.0
E    NaN
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57590424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档