Con*_*mer 2 python arrays python-2.7 pandas
我有一个二维数组:
[[2,1],[2,32],[4,4512],[1,34],[2,323],[2,42],[1,23],[4,123]...]
Run Code Online (Sandbox Code Playgroud)
最后,我想计算平均值并得到数组,如 [ [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])
Run Code Online (Sandbox Code Playgroud)
然后计算 的平均值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()])
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用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]))]
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,means
最终都为[(1, 28.5), (2, 99.5), (4, 2317.5)]
. 复杂性应该是O(nlogn)(对于排序;如果不需要排序的输出,则使用字典的第一种方法的复杂性仅为O(n))。
就我个人而言,我会采用字典方法。虽然另一个可以在“一行”中完成,但字典更清晰,也更快(即使需要排序,因为在这种情况下,排序是在合并后完成的,即元素更少)。
归档时间: |
|
查看次数: |
1195 次 |
最近记录: |