Skip to main content
 首页 » 编程设计

python之当其他两个列值匹配时计算列的平均值

2025年05月04日17davidwang456

我正在寻找一种简单的方法来迭代 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)