Python 如何标记&x27;重复序列';熊猫?

Python 如何标记&x27;重复序列';熊猫?,python,pandas,duplicates,Python,Pandas,Duplicates,我想在列表中标记重复序列 例如: (1,1,1,0,2,3,2,4,2) 我的预期结果是: (True,True,True,False,False,False,False,False,False) 我尝试了pandas.DataFrame.duplicated(keep=False),但它将“2”标记为重复: (True,True,True,False,True,False,True,False,True). 如何仅标记“重复序列”?您可以使用shift即 s = pd.Series(

我想在列表中标记重复序列

例如:

(1,1,1,0,2,3,2,4,2)
我的预期结果是:

(True,True,True,False,False,False,False,False,False)
我尝试了
pandas.DataFrame.duplicated(keep=False)
,但它将“2”标记为重复:

(True,True,True,False,True,False,True,False,True).  

如何仅标记“重复序列”?

您可以使用
shift

s = pd.Series([1,1,1,0,2,3,2,4,2])
mask = (s == s.shift().bfill())
还是谢谢@Zero

mask = s.diff().bfill().eq(0)

print tuple(mask)

(True,  True,  True, False, False, False, False, False, False)
如果您在结尾处有序列,比较两个掩码会很有帮助,即

n = pd.Series([1,1,1,0,2,3,2,4,2,2])
mask = (n==n.shift(-1).ffill()) | (n==n.shift().bfill())

tuple(mask) 
(True, True, True, False, False, False, False, False, True, True)
您需要使用for helper
系列
进行以下操作:

详情:

print (s.ne(s.shift()).cumsum())
0     1
1     2
2     3
3     3
4     4
5     5
6     5
7     6
8     7
9     8
10    8
11    9
dtype: int32

或者,
s.diff().bfill().eq(0)
谢谢,它可以工作。s==s.shift().bfill()是个好主意。作为熊猫的新手,它启发了我如何在矩阵计算中思考。再次感谢。选择@jez解决方案。它适合所有情况。我尝试过这个解决方案,它有效!cumsum()是一种有趣的方式。你的解决方案打开了我的心扉。熊猫是一个真正强大的工具。谢谢
print (s.ne(s.shift()).cumsum())
0     1
1     2
2     3
3     3
4     4
5     5
6     5
7     6
8     7
9     8
10    8
11    9
dtype: int32