分组并计算元组列表中的平均值

时间:2015-07-03 18:05:22

标签: python

我有一个像这样的元组列表:

x=[('HSBC8999', 4, 179447), ('HSBC1199', 81, 864108), ('HSBC1199', 32, 715121),('HSBC8999', 4, 1447),('HSBC1199', 32, 61521) ]

我想完成一些任务:

  1. 根据第一项:HSBCXXXX

  2. 对列表进行分组
  3. 在每个组中,计算列表中具有相同第二项的第3项的平均值。

  4. 这样的事情: 第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

1 个答案:

答案 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)))