NumPy/Pandas:删除顺序重复的值(相当于没有排序的bash-uniq)



给定如下Pandas系列(或numpy数组(:

import pandas as pd
myseries = pd.Series([1, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 3, 3, 2, 2, 3, 3, 1])

有没有一种很好的方法可以像unixuniq工具那样删除连续重复项?numpy/pandsunique()和pandasdrop_duplicates函数删除了所有重复项(如unix的| sort | uniq(,但我不希望这样:

>>> print(myseries.unique())
[1 2 3 4]

我想要这个:

>>> print(myseries.my_mystery_function())
[1, 2, 3, 4, 3, 2, 3, 1]

通过ne(!=(与shiftSeries进行比较,并通过boolean indexing:进行过滤

myseries = myseries[myseries.ne(myseries.shift())].tolist()
print (myseries)
[1, 2, 3, 4, 3, 2, 3, 1]

如果性能很重要,请使用Divakar解决方案。

我们可以使用slicing-

In [62]: a = myseries.values
In [63]: a[np.r_[True,a[:-1]!= a[1:]]]
Out[63]: array([1, 2, 3, 4, 3, 2, 3, 1])

使用!=:的jezrael版本

print(myseries[myseries!=myseries.shift()].tolist())

输出:

[1, 2, 3, 4, 3, 2, 3, 1]

最新更新