2017-10-17 117 views
1

我想根據多年的數據時間序列計算一年中某天的平均值。因此,我在處理下面示例中顯示的閏年時遇到了問題。pandas中的閏年。時間索引.dayofyear

ind=pd.DatetimeIndex(start='2016-01-01', end='2016-12-31', freq='d') 
dat=np.arange(1,367,1) 
ser=pd.Series(dat, index=ind) 

由此產生的系列由於閏年有366個條目。

我通過手動刪除了2月29日的條目:

ser=ser[~((ser.index.month==2)&(ser.index.day==29))] 

正如預期該系列產品具有事後只有365項。

當我計算年份的天除以平均:

doy_mean=ser.groupby(ser.index.dayofyear).mean() 

我再次獲得366項系列。任何想法如何處理這個?

謝謝!

+2

所有你正在做的是去除2月29日,在今年的最後一天仍將有366 DAYOFYEAR的值,所以你可以刪除這一年的最後一天或如果你只是想刪除2月29日 – EdChum

+0

檢查'len(doy_mean)'它應該是365. – Dark

+0

謝謝!我想從30年的時間序列中計算溫度。如果我每天花費一天的時間,365日的價值是從12月31日的非閏年值和12月30日的閏年值中計算出來的。按月份和日期分組時,我可以避免這個錯誤。 – Axel

回答

0

我並沒有遵循你的完整邏輯,但你可以用它作爲一個起點。

ind=pd.DatetimeIndex(start='2016-01-01', end='2016-12-31', freq='d') 
dat=np.arange(1,367,1) 
ser=pd.Series(dat, index=ind) 

ser=ser[~((ser.index.month==2)&(ser.index.day==29))] 
ser = ser.ne(0).cumsum() 

ser.groupby(ser.values).mean() 

輸出:

1 1 
2 2 
3 3 
4 4 
5 5 
... 
361 361 
362 362 
363 363 
364 364 
365 365 
dtype: int32