import os
from datetime import datetime, date
import datetime
test={datetime.date(1977, 6, 5): [81, 55, 0.0, False],
datetime.date(2007, 11, 18): [45, 41, 0.02, True],
datetime.date(2017, 11, 3): [43, 33, 0.3, True],
datetime.date(2007, 2, 24): [44, 36, 0.36, True],
datetime.date(2015, 2, 18): [54, 40, 0.0, False],
datetime.date(2008, 11, 18): [51, 43, 0.01, True],
datetime.date(1965, 12, 29): [43, 33, 0.27, True]}
sumtmax=0
year=[]
for k, v in test.items():
year.append(k.year)
yearset=set(year)
print(yearset)
for i in yearset:
for k, v in test.items():
k=k.year
if k==i:
print(v[0])
我想获取每年的平均值[0]和平均值[3]。我该怎么办...
答案 0 :(得分:2)
如果您正在使用此类数据,我绝对建议您使用pandas的表表示形式。
这里是一个例子:
import pandas as pd
df = pd.DataFrame(test).T.astype(float)
df.index = pd.to_datetime(df.index, format='%Y-%m-%d')
avg0 = df.groupby(df.index.year)[0].mean()
Out[60]:
1965 43.0
1977 81.0
2007 44.5
2008 51.0
2015 54.0
2017 43.0
Name: 0, dtype: float64
sum3 = df.groupby(df.index.year)[3].sum()
sum3
Out[61]:
1965 1.0
1977 0.0
2007 2.0
2008 1.0
2015 0.0
2017 1.0
Name: 3, dtype: float64
答案 1 :(得分:1)
您可以使用python内置的sum来按年获取值的总和,要获取平均值,只需将总和除以按年的条目数即可:
import os
from datetime import datetime, date
import datetime
test = {
datetime.date(1977, 6, 5): [81, 55, 0.0, False],
datetime.date(2007, 11, 18): [45, 41, 0.02, True],
datetime.date(2017, 11, 3): [43, 33, 0.3, True],
datetime.date(2007, 2, 24): [44, 36, 0.36, True],
datetime.date(2015, 2, 18): [54, 40, 0.0, False],
datetime.date(2008, 11, 18): [51, 43, 0.01, True],
datetime.date(1965, 12, 29): [43, 33, 0.27, True]
}
yearset = set([k.year for k in test.keys()])
for i in yearset:
print(sum([v[0] for k, v in test.items() if k.year == i]) / len(list(filter(lambda x: x.year == i, test.keys()))))
print(sum([v[3] for k, v in test.items() if k.year == i]))
答案 2 :(得分:1)
这将为您提供dict形式的结果,而无需外部库:
sum3 = {}
for k, v in test.items():
sum3[k.year] = sum3.get(k.year, 0) + v[3]
avg0 = {}
for k, v in test.items():
value = avg0.get(k.year, (0, 0))
avg0[k.year] = (value[0] + v[0], value[1] + 1.0)
avg0 = {k: v[0]/v[1] for k, v in avg0.items()}
sum3
#{2017: 1, 1965: 1, 2007: 2, 2008: 1, 1977: 0, 2015: 0}
avg0
#{2017: 43.0, 1965: 43.0, 2007: 44.5, 2008: 51.0, 1977: 81.0, 2015: 54.0}