python - 对按 ID 列分组的巨大 2D NumPy 数组求和的最有效方法?

标签 python numpy

我有一个海量数据数组(50 万行),如下所示:

id  value  score
1   20     20
1   10     30
1   15     0
2   12     4
2   3      8
2   56     9
3   6      18
...

如您所见,左侧有一个非唯一 ID 列,第 3 列中有各种分数。

我希望快速将所有分数相加,并按 ID 分组。在 SQL 中,这看起来像 SELECT sum(score) FROM table GROUP BY id

我尝试使用 NumPy 遍历每个 ID,按每个 ID 截断表格,然后对该表格的分数求和。

table_trunc = table[(table == id).any(1)]
score       = sum(table_trunc[:,2])

不幸的是,我发现第一个命令很慢。有没有更有效的方法来做到这一点?

最佳答案

你可以使用 bincount():

import numpy as np

ids = [1,1,1,2,2,2,3]
data = [20,30,0,4,8,9,18]

print np.bincount(ids, weights=data)

输出为[0. 50. 21. 18.],表示id==0的和为0,id==1的和为50。

关于python - 对按 ID 列分组的巨大 2D NumPy 数组求和的最有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23009050/

相关文章:

python - 打印列表时避免链式数字

python - 基于另一种阵列形状的零焊盘阵列

python - "undo"numpy.delete, numpy.insert?

python - python 中的上下文管理器和辅助函数

python - 如何根据带条件的列值在数据框中插入行?

python numpy 创建数据集列 : only add value based on condition otherwise null

python - 合并两个数组python的所有元素

python - .bashrc 保存用于导出

python - 从 'train model from_config' 导入 'deeppavlov.core.commands.train' 时出错

python - 如何从特定类别中抽样批处理?