[英]Why does Pandas rolling mean centres the window
我想創建一個年度數據圖和一個 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()
我嘗試添加“center=False”,但這沒有區別。 該圖仍然如下所示。
看,它應該可以工作。 因為,我沒有你的數據集看起來如何——我自己創建的
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));
您應該以上面所示的簡單形式獲取數據並首先存儲在變量中 - 而不是將所有操作堆疊在一起形成一條長線。
然后嘗試相同。 它應該工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.