我想在列表中标记重复序列。
例如:
(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).
如何仅标记'重复序列'?
答案 0 :(得分:2)
shift
需要cumsum
,duplicated
需要帮助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)