基于连续计数的逆向值

时间:2018-04-04 20:45:12

标签: python pandas

我有一个系列只包含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
...

2 个答案:

答案 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)