Вы можете использовать sparse.csr_matrix
:
from scipy import sparse
b = a[0]
v = a[1]
m = b.max() + 1
s = v.shape[0]
res = sparse.csr_matrix((v, b, np.arange(s+1)), (s, m)).sum(0)
matrix([[ 0, 40, 20, 100]], dtype=int32)
В этом случае показана сумма каждого значения из 0-a[0].max()
, поэтому, чтобы связать его с вашим первоначальным результатом:
t = np.unique(a[0])
np.stack((t, res.A1[t]))
array([[ 1, 2, 3],
[ 40, 20, 100]])