Python 基于索引列表合并/求和numy数组的行

Python 基于索引列表合并/求和numy数组的行,python,pandas,numpy,python-xarray,Python,Pandas,Numpy,Python Xarray,我有一个数组,我想在其中添加特定的行,以便得到一个行数较少的数组 import numpy as np a = np.arange(50).reshape(10,5) b = [0,0,0,1,1,2,2,2,2,3] a array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19], [20, 21, 22, 23

我有一个数组,我想在其中添加特定的行,以便得到一个行数较少的数组

import numpy as np
a = np.arange(50).reshape(10,5)
b = [0,0,0,1,1,2,2,2,2,3]
a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24],
       [25, 26, 27, 28, 29],
       [30, 31, 32, 33, 34],
       [35, 36, 37, 38, 39],
       [40, 41, 42, 43, 44],
       [45, 46, 47, 48, 49]])

a.shape
(10, 5)

len(b)
10
我想使用
b
作为要合并的行的基础。前3行相加成为新的第1行,第4行和第5行相加成为新的第2行。等等等等

预期结果:

array([[15, 18, 21, 24, 27],
       [35, 37, 39, 41, 43],
       [130, 134, 138, 142, 146],
       [45, 46, 47, 48, 49]])
循环对我来说是无效的。我不确定这是否可以在努比实现,但也许是熊猫还是沙雷


非常感谢您的帮助。

在pandas中,解决方案是创建
DataFrame
并通过
b
数组创建的索引聚合总和:

a = np.arange(50).reshape(10, 5)
b = [0,0,0,1,1,2,2,2,2,3]
print (a)

c = pd.DataFrame(a, index=b).sum(level=0).to_numpy()
print (c)
[[ 15  18  21  24  27]
 [ 35  37  39  41  43]
 [130 134 138 142 146]
 [ 45  46  47  48  49]]

我想添加一个numpy解决方案:

import numpy as np

a = np.arange(50).reshape(10,5)
b = [0,0,0,1,1,2,2,2,2,3]

sum_common = lambda x : sum(a[b==x,:])

indx = np.unique(b)

c = np.array(map(sum_common, indx))
当然,这可以在一行中完成:

c=np.array(map(lambda x : sum(a[b==x,:]), np.unique(b)))
结果是:

array([[ 15,  18,  21,  24,  27],
       [ 35,  37,  39,  41,  43],
       [130, 134, 138, 142, 146],
       [ 45,  46,  47,  48,  49]])