给定如下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
(!=
(与shift
和Series
进行比较,并通过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]