簡體   English   中英

為什么 Pandas 滾動意味着窗口居中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM