汇总每月价值

时间:2013-06-13 02:06:49

标签: python datetime

我有一个包含多个列表的python列表:

 A = [['1/1/1999', '3.0'], 
      ['1/2/1999', '4.5'],
      ['1/3/1999', '6.8'],
      ......
      ......

      ['12/31/1999', '8.7']]

我需要的是将每个月对应的所有值组合在一起,最好是以包含月份作为键的字典及其值作为值的字典形式。

示例:

   >>> A['1/99']
   >>> ['3.0', '4.5', '6.8'.....]

或者以列表的形式,以便:

示例:

  >>> A[0]
  >>> ['3.0', '4.5', '6.8'.....]

感谢。

3 个答案:

答案 0 :(得分:3)

如果你不介意另一种依赖,那么熊猫是完美的:

例如:

import pandas
import numpy as np

# Generate some data
dates = pandas.date_range('1/1/1999', '12/31/1999')
values = (np.random.random(dates.size) - 0.5).cumsum()

df = pandas.DataFrame(values, index=dates)

for month, values in df.groupby(lambda x: x.month):
    print month
    print values

但真正巧妙的是分组DataFrame的聚合。例如,如果我们想要查看按月分组的值的最小值,最大值和平均值:

print df.groupby(lambda x: x.month).agg([min, max, np.mean])

这会产生:

         min       max      mean
1  -0.812627  1.247057  0.328464
2  -0.305878  1.205256  0.472126
3   1.079633  3.862133  2.264204
4   3.237590  5.334907  4.025686
5   3.451399  4.832100  4.303439
6   3.256602  5.294330  4.258759
7   3.761436  5.536992  4.571218
8   3.945722  6.849587  5.513229
9   6.630313  8.420436  7.462198
10  4.414918  7.169939  5.759489
11  5.134333  6.723987  6.139118
12  4.352905  5.854000  5.039873

答案 1 :(得分:2)

    from collections import defaultdict
    from datetime import date

    month_aggregate = defaultdict (list)
    for [d,v] in A:
        month, day, year = map(int, d.split('/'))
        date = date (year, month, 1)
        month_aggregate [date].append (v)

我遍历每个日期和值,我提取年份和月份并使用这些值创建日期。然后,我将该值附加到与该年份和月份相关联的列表中。

或者,如果您想使用字符串作为键,那么您可以

    from collections import defaultdict

    month_aggregate = defaultdict (list)
    for [d,v] in A:
        month, day, year = d.split('/')
        month_aggregate [month + "/" + year[2:]].append (v)

答案 2 :(得分:1)

这是我的解决方案,不包括

def getKeyValue(lst):
    a = lst[0].split('/')
    return '%s/%s' % (a[0], a[2][2:]), lst[1]

def createDict(lst):
    d = {}
    for e in lst:
        k, v = getKeyValue(e)
        if not k in d:    d[k] = [v]
        else:             d[k].append(v)
    return d

A = [['1/1/1999', '3.0'],
     ['1/2/1999', '4.5'],
     ['1/3/1999', '6.8'],
     ['12/31/1999', '8.7']]

print createDict(A)
>>>{'1/99': ['3.0', '4.5', '6.8'], '12/99': ['8.7']}