我有每日降水值,时间信息如下:
a = [(19500101,3.45),(19500102,1.2).......(19701231,1.4)]
我想使用日期信息来获取它的年度平均值。这可能是一个简单的解决方案。我试过如下。有什么建议吗?
prcp=numpy.array(precipitation)
time=numpy.array(time)
yearly=numpy.zeros(prcp.shape)
#-----------------Get annual means-----------------
for ii in xrange(len(time)):
tt=time[ii]
if ii==0:
year_old=tt[0:4]
index_start=ii
else:
#----------------new year----------------
year=tt[0:4]
if year != year_old:
year_mean=numpy.mean(prcp[index_start:ii])
yearly[index_start:ii]=year_mean
year_old=month
index_start=ii
#----------------Get the last year----------------
if ii==len(time)-1:
year_mean=numpy.mean(prcp[index_start:])
yearly[index_start:]=year_mean
答案 0 :(得分:2)
您可以尝试Pandas
进行汇总。
import pandas as pd
a = [(19500101,3.45),(19500102,1.2), (19701231,1.4)]
df = pd.DataFrame(a) # convert to dataframe
df[0] = pd.to_datetime(df[0], format='%Y%m%d') # create a datetime series
df.groupby(df[0].map(lambda x: x.year)).mean() # groupby year and mean from g roups
1
0
1950 2.325
1970 1.400
答案 1 :(得分:1)
您可以使用下面的代码段执行此操作:
首先,根据年份分离数据:
>>> list_of_data = [(19500101,3.45), (19500102,1.2), (19701231,1.4)]
>>> from collections import defaultdict
>>> data = defaultdict(list)
>>> for item in list_of_data:
... data[str(item[0])[:4]].append(item[1])
现在,使用
计算平均值>>> for key, value in data.iteritems():
... print key, sum(value)/len(value)
...
1950 2.325
1970 1.4
请注意,我正在对数据进行两次运行,如果您使用pandas库,@ John对Pandas的回答可能会更快。
答案 2 :(得分:0)
我推荐{@ 1}} @ John-Galt建议,
如果你想要一个没有pandas的python解决方案:
pandas