我有一个像这样的元组列表:
x=[('HSBC8999', 4, 179447), ('HSBC1199', 81, 864108), ('HSBC1199', 32, 715121),('HSBC8999', 4, 1447),('HSBC1199', 32, 61521) ]
我想完成一些任务:
根据第一项:HSBCXXXX
在每个组中,计算列表中具有相同第二项的第3项的平均值。
这样的事情: 第1组:
('HSBC8999', 4, 179447)
('HSBC8999', 4, 1447)
4的平均值:(179447 + 1447)/ 2
第2组:
('HSBC1199', 81, 864108)
('HSBC1199', 32, 715121)
('HSBC1199', 32, 61521)
平均值为81:864108
平均值为32 =(715121 + 61521)/ 2
答案 0 :(得分:2)
import itertools
import operator
L = [('HSBC8999', 4, 179447), ('HSBC1199', 81, 864108), ('HSBC1199', 32, 715121),('HSBC8999', 4, 1447),('HSBC1199', 32, 61521) ]
L.sort(key=operator.itemgetter(0))
for _k, stackoverflow in itertools.groupby(L, operator.itemgetter(0)):
subl = list(stackoverflow)
subl.sort(key=operator.itemgetter(1))
for k, subg in itertools.groupby(subl, operator.itemgetter(1)):
subs = list(subg)
print("the average of {} is {}".format(k, sum(s[2] for s in subs)/len(subs)))