Home > Back-end >  How to count the current consecutive 0 in the Dataframe column?
How to count the current consecutive 0 in the Dataframe column?

Time:10-06

I have a Dataframe with a column called No.. I need to count the number of consecutive 0s in column No.. For example, the first 0 is recorded as 1, and the second 0 is recorded as 2. If it encounters 1, the counter is cleared. And save the result in the column count.

what should I do?

An example of my Dataframe is as follows:

import numpy as np
import pandas as pd

np.random.seed(2021)
a = np.random.randint(0, 2, 20)
df = pd.DataFrame(a, columns=['No.'])
print(df)
     No.
0     0
1     1
2     1
3     0
4     1
5     0
6     0
7     0
8     1
9     0
10    1
11    1
12    1
13    1
14    0
15    0
16    0
17    0
18    0
19    0

The result I need:

    No. count
0   0   1
1   1   0
2   1   0
3   0   1
4   1   0
5   0   1
6   0   2
7   0   3
8   1   0
9   0   1
10  1   0
11  1   0
12  1   0
13  1   0
14  0   1
15  0   2
16  0   3
17  0   4
18  0   5
19  0   6

CodePudding user response:

Generate pseudo-groups with cumsum and then generate within-group counters with groupby.cumsum:

groups = df['No.'].ne(0).cumsum()
df['count'] = df['No.'].eq(0).groupby(groups).cumsum()

Output:

    No.  count
0     0      1
1     1      0
2     1      0
3     0      1
4     1      0
5     0      1
6     0      2
7     0      3
8     1      0
9     0      1
10    1      0
11    1      0
12    1      0
13    1      0
14    0      1
15    0      2
16    0      3
17    0      4
18    0      5
19    0      6
  • Related