我有一个包含多个列表的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'.....]
感谢。
答案 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']}