【发布时间】:2018-05-01 18:39:23
【问题描述】:
我有以下 numpy 数组:
import numpy as np
arr = np.array([[1,2,3,4,2000],
[5,6,7,8,2000],
[9,0,1,2,2001],
[3,4,5,6,2001],
[7,8,9,0,2002],
[1,2,3,4,2002],
[5,6,7,8,2003],
[9,0,1,2,2003]
])
我了解np.sum(arr, axis=0)提供结果:
array([ 40, 28, 36, 34, 16012])
我想做的(没有 for 循环)是根据最后一列的值对列求和,以便提供的结果是:
array([[ 6, 8, 10, 12, 4000],
[ 12, 4, 6, 8, 4002],
[ 8, 10, 12, 4, 4004],
[ 14, 6, 8, 10, 4006]])
我意识到如果没有循环可能会有些牵强,但希望能做到最好……
如果必须使用 for 循环,那将如何工作?
我试过np.sum(arr[:, 4]==2000, axis=0)(我会用for循环中的变量替换2000),但是它给出了2
【问题讨论】:
-
我认为您正在寻找
pandasgroupby。 -
右列中的值是否总是恰好重复两次,或者这只是您的示例中的巧合?
-
@cᴏʟᴅsᴘᴇᴇᴅ 你能重新打开吗?我正在研究一个纯 numpy 解决方案。
-
@MadPhysicist 好的,没问题,我也有兴趣看看。
-
巧合(我基本上有很多数据要按年汇总)。
df.groupby(4, axis=0).sum()确实给了我我需要的东西。我不会回答,因为我想知道是否可以用 numpy 完成同样的事情,但是谢谢!