为啥熊猫滚动意味着居中窗口

Posted

技术标签:

【中文标题】为啥熊猫滚动意味着居中窗口【英文标题】:Why does Pandas rolling mean centres the window为什么熊猫滚动意味着居中窗口 【发布时间】:2021-12-22 21:41:34 【问题描述】:

我想创建一个年度数据图表和一个 5 年移动平均值,包括当前和过去 4 年的值。但是我的 5 年窗口居中,我不知道为什么。我的意思是第一个移动平均线从 3 年开始,最终值在去年的第 3 年。根据我的数据,移动平均线跌落悬崖,因为最后一年不完整 - 我曾预计最终值也会下降,但我无法弄清楚如何让移动平均线按预期工作。

我的代码在下面

#Plot historical revenue for context. Drop last year as it is incomplete
data=df_full.groupby('year').agg(Revenue=('price',sum)).reset_index()
data=data[:-1]
dataMA=df_full.groupby('year').agg(Revenue=('price',sum)).reset_index().rolling(5,center=False).mean()

fig=go.Figure()
fig.add_trace(go.Scatter(x=data.year, y=data.Revenue, name="Revenue"))
fig.add_trace(go.Scatter(x=dataMA.year, y=dataMA.Revenue, name="5 year Average"))
fig.update_layout(title="Annual Revenue 2001 to 2019",
                  xaxis_title="Year",
                  yaxis_title="Annual Revenue $")
fig.show()

我尝试添加“centre=False”,但这没有任何区别。图表仍然如下所示。

【问题讨论】:

如果有帮助,请不要忘记将我的答案打勾为正确?? 【参考方案1】:

看,它应该可以工作。 因为,我没有你的数据集的样子——我自己创建的

ser = pd.Series(np.random.randint(10,1000, 19), index=range(2001, 2020))

# Should look like this after your Group by
2001    578
2002    388
2003    803
2004    413
2005    125
2006    331
2007    179
2008    180
2009    331
2010    875
2011    422
2012    699
2013    256
2014    918
2015    566
2016    754
2017    521
2018    200
2019     16
dtype: int32

现在,开始滚动:

ser.plot()
plt.ylim([0, df.max()])
ser.rolling(5, center=False).mean().plot()
plt.xticks(range(2000, 2020, 5));

结果是:

现在我想

您应该以如上所示的简单形式获取数据并首先存储在变量中 — 而不是将所有操作叠加在一起形成一条长线。

然后尝试相同。它应该可以工作。

【讨论】:

感谢 Aayush Shah,通过它我发现移动 reset_index 命令使其按预期工作。

以上是关于为啥熊猫滚动意味着居中窗口的主要内容,如果未能解决你的问题,请参考以下文章

如何用滚动平均窗口总结多个熊猫数据框?

熊猫滚动适用于可变窗口长度

在熊猫滚动中应用自定义窗口功能

带有groupby的熊猫数据框滚动窗口

熊猫数据框,对滚动窗口中的任何列进行计算

熊猫滚动窗口 - datetime64[ns] 未实现