我正在寻找一种简单的方法来迭代 Python 数组并在前两列相同时对第三列进行平均。
例如,这个数组:
['0.30', '1.9', 5]
['0.30', '1.9', 33]
['0.30', '1.9', 39]
['0.30', '2.0', 21]
['0.30', '2.0', 51]
['0.30', '2.0', 51]
['0.30', '2.1', 42]
['0.30', '2.1', 34]
['0.30', '2.1', 43]
['0.30', '2.2', 38]
['0.30', '2.2', 34]
['0.30', '2.2', 50]
['0.34', '1.9', 29]
['0.34', '1.9', 47]
['0.34', '2.0', 45]
['0.34', '2.0', 31]
['0.34', '2.0', 45]
['0.34', '2.0', 57]
['0.34', '2.0', 25]
应该变成:
['0.30', '1.9', 25.66]
['0.30', '2.0', 41.00
['0.30', '2.1', 39.66]
['0.30', '2.2', 40.66]
['0.30', '2.3', 26.00]
['0.34', '1.9', 38.00]
['0.34', '2.0', 40.60]
如何在 Python 中执行此操作?
请您参考如下方法:
from itertools import groupby
final = []
for k,v in groupby(l,lambda x:x[:2]):
lst = list(v)
avg = sum(x[2] for x in lst) / float(len(lst))
lst[0][2] = round(avg,2)
final.append(lst[0])
print final
[['0.30', '1.9', 25.67], ['0.30', '2.0', 41.0], ['0.30', '2.1', 39.67], ['0.30', '2.2', 40.67], ['0.34', '1.9', 38.0], ['0.34', '2.0', 40.6]]
如果您使用的是 python 3.4,则可以使用统计库来计算平均值:
from statistics import mean
avg = mean(x[2] for x in lst)
