2017-10-17 114 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