Python 使用具有多个值的索引,如何获取最小值

Python 使用具有多个值的索引,如何获取最小值,python,numpy,Python,Numpy,我有一个从一个数组中选择元素的索引。但有时索引可能有重复的条目。。。在这种情况下,我想选择相应的较小值。可能吗 index = [0,3,5,5] dist = [1,1,1,3] arr = np.zeros(6) arr[index] = dist print arr 我得到的是: [ 1. 0. 0. 1. 0. 3.] 我想要的是: [ 1. 0. 0. 1. 0. 1.] [[ 0. 1.] [ 0. 0.] [ 0. 0.] [ 2. 3.]

我有一个从一个数组中选择元素的索引。但有时索引可能有重复的条目。。。在这种情况下,我想选择相应的较小值。可能吗

index = [0,3,5,5]
dist = [1,1,1,3]
arr = np.zeros(6)
arr[index] = dist
print arr
我得到的是:

[ 1.  0.  0.  1.  0.  3.]
我想要的是:

[ 1.  0.  0.  1.  0.  1.]
 [[ 0.  1.]
 [ 0.  0.]
 [ 0.  0.]
 [ 2.  3.]
 [ 0.  0.]
 [ 4.  5.]]
附录


实际上,我有第三个数组,其中包含要插入的(向量)值。因此,问题是将
中的值插入
arr
索引
位置,如下所示。但是,当多个值具有相同的索引时,我想选择与minimum
dist
对应的值

index = [0,3,5,5]
dist = [1,1,1,3]
values = np.arange(8).reshape(4,2)
arr = np.zeros((6,2))
arr[index] = values
print arr
我得到:

 [[ 0.  1.]
 [ 0.  0.]
 [ 0.  0.]
 [ 2.  3.]
 [ 0.  0.]
 [ 6.  7.]]
我想得到:

[ 1.  0.  0.  1.  0.  1.]
 [[ 0.  1.]
 [ 0.  0.]
 [ 0.  0.]
 [ 2.  3.]
 [ 0.  0.]
 [ 4.  5.]]

在熊猫中使用
groupby

import pandas as pd
index = [0,3,5,5]
dist = [1,1,1,3]
s = pd.Series(dist).groupby(index).min()
arr = np.zeros(6)
arr[s.index] = s.values
print arr

如果对
index
进行排序,则可以使用
itertools.groupby
对该列表进行分组

np.array([(g[0],min([x[1] for x in g[1]])) for g in 
    itertools.groupby(zip(index,dist),lambda x:x[0])])
产生

array([[0, 1],
       [3, 1],
       [5, 1]])

这比使用
np.unique
的版本慢约8倍。因此,对于
N=1000
来说,它与Pandas版本类似(我猜是因为我的Pandas导入有问题)。对于较大的N,熊猫版本更好。看起来熊猫的方法有着巨大的启动成本,这限制了它在小N的速度。

你的标题中“最近”是什么意思?您想要给定索引中的最小值,还是其他什么?我想说“最小”,但由于某种原因,stackoverflow认为标题无效:-(dist如何影响附录中的情况?我的解释:“对于
索引中的重复数字
,请选择
中与
距离
中最小数字对应的行。是否正确?如果您希望重复索引的
中的“最小”值,则它是不明确的(如果说
中的两行是
[0,2]
[1,1]
)您的解释是正确的。我想插入
dist
中的值,如果多个值具有相同的
索引,则选择
dist
最小的值。我想,您想插入
值中的值。我的解决方案应该针对2d
值执行此操作,方法是根据
dist
进行排序实际上,我有第三个值数组…你能根据我问题中的附录调整你的答案吗?对不起,我不知道为什么我的附录丢失了…现在你应该用样本数据找到它。我用这个问题解决了附录部分:是的,我也发现了时间安排,我认为制作一个
系列
一定很昂贵。