python字典按年份求和和和平均值
我想得到每年值[0]的平均值和值[3]的总和。我应该怎么做…如果您正在处理此类数据,我绝对建议使用表表示法 以下是一个例子:python字典按年份求和和和平均值,python,arrays,dictionary,sum,average,Python,Arrays,Dictionary,Sum,Average,我想得到每年值[0]的平均值和值[3]的总和。我应该怎么做…如果您正在处理此类数据,我绝对建议使用表表示法 以下是一个例子: 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(201
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])
您可以使用python builtin按年份获得值的总和,要获得平均值,只需将总和除以按年份输入的数量即可:
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
这将以dict的形式提供结果,无需外部库:
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]))
为什么不
year=set()
概念,所以我只是将默认值更改为(0,0)
元组作为起点,并向其添加新值以及将计数器增加1。1.0
部分是针对2.x
用户的,否则您可以在python3.x
中使用1
。
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}