python - 计算重复平均 python

标签 python arrays python-2.7 pandas

我有一个二维数组:

 [[2,1],[2,32],[4,4512],[1,34],[2,323],[2,42],[1,23],[4,123]...]

最后,我想计算平均值并得到像 [ [1,mean],[2,mean],[3,mean]...] 这样的数组,

谁有好的解决办法?我用过:

for i in range(len(array)):
    temp =[]
    for j in range(len(array)):
        if Table[i][0] == Table[j][0]:
                temp.append(Table[j])

然后计算 temp 的平均值,但效率不高。

有没有人有使用pandas库的解决方案?

最佳答案

您应该创建一个字典,收集每个键(第一项)的所有值(第二项)。然后,您可以计算字典中每个条目的平均值。

from __future__ import division # use floating-point division by default
values = [[2,1],[2,32],[4,4512],[1,34],[2,323],[2,42],[1,23],[4,123]]

values_by_key = collections.defaultdict(list)
for k, v in values:
    values_by_key[k].append(v)
means = sorted([(k, sum(v) / len(v)) for k, v in values_by_key.items()])

或者,您可以使用 groupby 以相同的键对项目进行分组(记得先排序)并使用(有点复杂的)嵌套列表理解。

means = [(k, sum(v)/len(v)) 
         for k, v in ((k, [v[1] for v in vals]) 
                      for k, vals in itertools.groupby(sorted(values), key=lambda t: t[0]))]

在这两种情况下,意味着最终都是[(1, 28.5), (2, 99.5), (4, 2317.5)]。复杂度应该是 O(nlogn)(对于排序;如果不需要排序后的输出,那么使用字典的第一种方法的复杂度只是 O(n) ).

就个人而言,我会选择字典方法。虽然另一个可以在“一行”中完成,但 dict 更清晰也更快(即使需要排序,因为在这种情况下排序是在合并之后完成的,即使用更少的元素)。

关于python - 计算重复平均 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35344622/

相关文章:

php - 将 foreach 与可能不是数组的变量一起使用

python - 如何在网页中连续显示python输出?

python - 在python中查找两个列表之间的微分条件

python - 正则表达式在在线正则表达式解释器中匹配,但在python中不匹配

python - 重新运行代码,直到获得特定的输出

python - 如何拥有两个优化器,一个优化器训练整个参数,另一个训练部分参数?

Python - 将字典列表重新组合为两个嵌套的字典列表?

java - 我在 Java 中尝试将 Stack 实现为数组时不断收到 'cannot find symbol' 错误

javascript - 在 JavaScript 中获取两个数组的并集

python - Pandas Dataframe 但不显示过滤结果。过滤逻辑有效,显示屏显示过滤结果的 NaT