TLDR
In [1]: print(((df['A'] != 1).cumsum().loc[df['A'] == 1].value_counts() >= 3).sum())
2
Explanation
In [1]: import pandas as pd
In [2]: df = pd.DataFrame({'A':[0,0,1,0,1,0,0,0,0,1,1,1,1,0,1,1,1]})
The following is going to assign a unique ID to every set of consecutive 1...
In [3]: df['cumsum'] = (df['A'] != 1).cumsum()
In [4]: print(df)
A cumsum
0 0 1
1 0 2
2 1 2
3 0 3
4 1 3
5 0 4
6 0 5
7 0 6
8 0 7
9 1 7
10 1 7
11 1 7
12 1 7
13 0 8
14 1 8
15 1 8
16 1 8
... as long as you clear up by keeping only the rows where 'A' equals 1
In [5]: df = df[df['A'] == 1]
In [6]: print(df)
A cumsum
2 1 2
4 1 3
9 1 7
10 1 7
11 1 7
12 1 7
14 1 8
15 1 8
16 1 8
Then, you can either use value_counts()
or groupby()
# With value_counts()
In [7]: print(df['cumsum'].value_counts())
7 4
8 3
3 1
2 1
Name: cumsum, dtype: int64
# The amount of sets of at least 3 consecutive 1 is:
In [8]: print((df['cumsum'].value_counts() >= 3).sum())
2
# With groupby()
In [9]: list(df.groupby('cumsum'))
Out[10]:
[(2,
A cumsum
2 1 2),
(3,
A cumsum
4 1 3),
(7,
A cumsum
9 1 7
10 1 7
11 1 7
12 1 7),
(8,
A cumsum
14 1 8
15 1 8
16 1 8)]
# The amount of sets of at least 3 consecutive 1 is:
In [10]: print(len([dataframe for _, dataframe in df.groupby('cumsum') if len(dataframe) >= 3]))
2