使用时间信息计算元组的值的年平均值

时间:2015-04-11 19:00:04

标签: python python-2.7 tuples

我有每日降水值,时间信息如下:

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

3 个答案:

答案 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