相关疑难解决方法(0)

最有效的方法来汇总巨大的2D NumPy数组,按ID列分组?

我有一个海量数据阵列(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
...
Run Code Online (Sandbox Code Playgroud)

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

我希望快速添加按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])
Run Code Online (Sandbox Code Playgroud)

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

python numpy

6
推荐指数
1
解决办法
3483
查看次数

numpy (Python) 中按组计算数组元素的乘积

我正在尝试构建一个返回数组元素子集的乘积的函数。基本上我想构建一个prod_by_group执行此操作的函数:

values = np.array([1, 2, 3, 4, 5, 6])
groups = np.array([1, 1, 1, 2, 3, 3])

Vprods = prod_by_group(values, groups)
Run Code Online (Sandbox Code Playgroud)

结果Vprods应该是:

Vprods
array([6, 4, 30])
Run Code Online (Sandbox Code Playgroud)

对于元素之和,这里有一个很好的答案,我认为它应该类似于: /sf/answers/307121741/

我尝试采取log第一个,然后sum_by_group,然后exp,但遇到了数字问题。

对于按组排列的元素的最小和最大数量,这里还有一些其他类似的答案: /sf/answers/603621791/

编辑:感谢您的快速解答!我正在尝试它们。我应该补充一点,我希望它尽可能快(这就是我试图以某种矢量化方式将其放入 numpy 的原因,就像我给出的示例一样)。

编辑:我评估了迄今为止给出的所有答案,最好的答案由下面的 @seberg 给出。这是我最终使用的完整功能:

def prod_by_group(values, groups):
    order = np.argsort(groups)
    groups = groups[order]
    values = values[order]
    group_changes = np.concatenate(([0], np.where(groups[:-1] != groups[1:])[0] + 1))
    return np.multiply.reduceat(values, group_changes)
Run Code Online (Sandbox Code Playgroud)

python numpy

5
推荐指数
1
解决办法
2452
查看次数

使用NumPy阵列执行分组平均值和标准差

我有一组数据(X,Y).我的自变量值X不是唯一的,因此有多个重复值,我想输出一个新的数组,其中包含:X_unique,它是X的唯一值列表.Y_mean,对应于X_unique的所有Y值的平均值.Y_std,对应于X_unique的所有Y值的标准偏差.

x = data[:,0]
y = data[:,1]
Run Code Online (Sandbox Code Playgroud)

python arrays numpy

5
推荐指数
1
解决办法
958
查看次数

标签 统计

numpy ×3

python ×3

arrays ×1