基于连续计数的逆向值

Joh*_*ohn 2 python pandas

我有一个只包含1和0的系列作为标志.我试图找出一种计算连续重复值数量的好方法,如果它不符合阈值,我想反转它们.例如,如果我连续少于5个重复值,则将它们从0转换为1,反之亦然.

例如:

Flag
1
1
1
1
1
0
0
0
0
1
1
...
Run Code Online (Sandbox Code Playgroud)

会成为:

Flag
1
1
1
1
1
1
1
1
1
1
1
...
Run Code Online (Sandbox Code Playgroud)

piR*_*red 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
Run Code Online (Sandbox Code Playgroud)

  • 你怎么这么轻松地做到这一点?我差不多花了9分钟才能到达这个地方:) (3认同)