我有一个系列只包含1&0;和0' s用作标志。我试图找出计算连续重复值数量的好方法,如果它没有达到阈值,我想要反转它们。例如,如果我连续少于5个重复值,则将它们从0反转为1,反之亦然。
例如:
Flag
1
1
1
1
1
0
0
0
0
1
1
...
会变成:
Flag
1
1
1
1
1
1
1
1
1
1
1
...
答案 0 :(得分:5)
diff().ne(0)
查找中断cumsum()
创建群组groupby.transform('size')
计算群组的大小sub(df.Flag).abs()
df.Flag.groupby(
df.Flag.diff().ne(0).cumsum()
).transform('size').lt(5).sub(df.Flag).abs()
0 1
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 0
10 0
Name: Flag, dtype: int64
答案 1 :(得分:1)
尝试另一种方式
s=df.Flag.diff().ne(0).cumsum().value_counts()
np.where(((s>=5).repeat(s).values),df.Flag,1-df.Flag)
Out[1158]: array([1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], dtype=int64)