给出这样的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])
是否有一种好方法来删除顺序重复项,就像unix uniq
工具一样? numpy / pandas unique()
和pandas drop_duplicates
函数会删除所有重复项(例如unix的| sort | uniq
),但我不希望这样做:
>>> print(myseries.unique())
[1 2 3 4]
我想要这个:
>>> print(myseries.my_mystery_function())
[1, 2, 3, 4, 3, 2, 3, 1]
答案 0 :(得分:6)
用ne
和!=
比较shift
(Series
),然后用boolean indexing
过滤:
myseries = myseries[myseries.ne(myseries.shift())].tolist()
print (myseries)
[1, 2, 3, 4, 3, 2, 3, 1]
如果性能很重要,请使用Divakar
解决方案。
答案 1 :(得分:4)
我们可以使用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])
答案 2 :(得分:0)
jezrael使用!=
的版本:
print(myseries[myseries!=myseries.shift()].tolist())
输出:
[1, 2, 3, 4, 3, 2, 3, 1]