熊猫:条件滚动块计数

问题描述

我有一个系列如下:

Time Step
0   0
1   1
2   2
3   2
4   2
5   3
6   0
7   1
8   2
9   2
10  2
11  3

我想使用Pandas对包含step = 2的每个时间块执行条件滚动计数,并将该计数输出到新列。我找到了有关如何进行条件滚动计数(Pandas: conditional rolling count)的答案,但是我无法弄清楚如何将每个步骤的顺序运行计为一个块。输出应如下所示:

Time Step Run_count
0   0 
1   1
2   2     RUN1
3   2     RUN1
4   2     RUN1
5   3
6   0
7   1
8   2     RUN2
9   2     RUN2
10  2     RUN2
11  3

解决方法

让我们尝试一下:

s = df.Step.where(df.Step.eq(2))
df['Run_count'] = s.dropna().groupby(s.isna().cumsum()).ngroup()+1

输出:

    Time  Step  Run_count
0      0     0        NaN
1      1     1        NaN
2      2     2        1.0
3      3     2        1.0
4      4     2        1.0
5      5     3        NaN
6      6     0        NaN
7      7     1        NaN
8      8     2        2.0
9      9     2        2.0
10    10     2        2.0
11    11     3        NaN