如何根据另一个数组中的重复值在一个数组中添加值?

时间:2019-06-07 14:44:01

标签: python arrays numpy sorting

假设我有一个数组:

Values = np.array([0.221,0.35,25.9,54.212,0.0022])
Indices = np.array([22,10,11,22,10])

我想将“值”的元素添加在一起,这些元素在“索引”中共享相同的数字。

换句话说,我想要的输出:

Total = np.array([0.221+54.212,0.35+0.002,25.9])
Index = np.array([22,10,11])

我一直试图使用np.unique无济于事。不能完全弄清楚!

2 个答案:

答案 0 :(得分:3)

我们可以使用np.unique及其可选参数return_inverse来基于Indices中的唯一性获取ID,然后将它们与bincount一起使用以进行分箱(基于ID)求和并因此解决它-

Index,idx = np.unique(Indices, return_inverse=True)
Total = np.bincount(idx, Values)

给定样本的输出-

In [32]: Index
Out[32]: array([10, 11, 22])

In [33]: Total
Out[33]: array([ 0.3522, 25.9   , 54.433 ])

或者,我们可以使用pandas.factorize来获得唯一的ID,然后再进行bincount,如先前所示。因此,第一步可以被这样的东西代替-

import pandas as pd

idx,Index = pd.factorize(Indices)

答案 1 :(得分:1)

一种可能性是考虑使用Pandas

In [14]: import pandas as pd

In [15]: pd.DataFrame({'Values': Values, 'Indices': Indices}).groupby('Indices').agg(sum)
Out[15]: 
          Values
Indices         
10        0.3522
11       25.9000
22       54.4330

这应该是不言而喻的,尽管它并没有保留索引的顺序(从这个问题上您是否在乎它还不是很清楚)。