微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决对巨大的2D NumPy数组求和按ID列分组的最有效方法?

您可以使用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。

解决方法

我有一个庞大的数据数组(500k行),看起来像:

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])

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。