如何在熊猫中标记“重复序列”?

时间:2017-10-20 09:06:19

标签: 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).  

如何仅标记'重复序列'?

2 个答案:

答案 0 :(得分:2)

shift需要cumsumduplicated需要帮助Series申请{{3}}:

s = pd.Series([1,2,1,1,2,3,3,2,4,2,2,1])
print (s.ne(s.shift()).cumsum().duplicated(keep=False).values)
[False False  True  True False  True  True False False  True  True False]

详情:

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

答案 1 :(得分:1)

您可以使用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)