NumPy / Pandas:删除连续的重复值(等同于不排序的bash uniq)

时间:2018-12-04 08:22:49

标签: python pandas numpy

给出这样的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]

3 个答案:

答案 0 :(得分:6)

ne!=比较shiftSeries),然后用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]