删除具有相同时间戳numpy的行

删除具有相同时间戳numpy的行,numpy,duplicate-removal,Numpy,Duplicate Removal,我有一个表单的numpy数组 TimeStamp Col1 Col2 0 1 1.2 0 1.1 1.1 1 2 3 1 2.3 3.1 2 2.2 3.0 3 3 4 我想要的最后一个数组没有重复的时间戳。对于给定的时间戳,我需要最后一个已知值。例如,输出是 TimeStamp Col1 Col2 0

我有一个表单的numpy数组

TimeStamp  Col1 Col2
0           1    1.2
0           1.1  1.1
1           2    3
1           2.3  3.1
2           2.2  3.0 
3           3    4
我想要的最后一个数组没有重复的时间戳。对于给定的时间戳,我需要最后一个已知值。例如,输出是

TimeStamp      Col1    Col2        
    0           1.1     1.1       
    1           2.3     3.1
    2           2.2     3.0 
    3           3       4

很明显,我可以在一个笨重的for循环中完成这项工作。但我很想找到一个更优雅的numpy解决方案。谢谢。

实现这一点的方法不止一种:

uniq = np.unique(arr)
indexes = np.searchsorted(arr, uniq, side='right') - 1
这里的想法是找到值发生变化的地方。结果是一个索引数组,您可以将其用于“花式索引”。类似的索引是:

indexes = np.where(np.diff(arr))
问题是它忽略了最后一个元素

或者,您可以让NumPy为您提供唯一性所在的索引,但不幸的是,它只支持返回第一个,而不支持返回最后一个,因此:

uniq = np.unique(arr, return_index=True)[1]
indexes = np.roll(uniq - 1, -1)
indexes[-1] = len(arr) - 1
另一个:

indexes = len(arr) - np.unique(arr[::-1], return_index=True)[1] - 1

在这里,我们反转输入,从unique中获取“last”元素,然后在最后调整索引。

非常感谢John,但不幸的是,我在这里迷失了方向。我在这里举了一个小例子,我选择了a=np.array([[0,1,1],[0,1.1,1.5],[0,1,1],[1,2,3],[2,3,4],[2,3.3,4.4]]),得到了uniq=array([0,1,4,5,10,11,16,14,17]),索引=array([0,3,4,9,10,15,13,16,-1])。我该如何使用它们?啊,我想你只是指第一列,不是吗?对,那么在这种情况下,
a[np.searchsorted(a[:,0],np.unique(a[:,0]),side='Right')-1]