Option 1
Use a series to mask the cumulative amount of negation. Then usevalue_counts
(~s).cumsum()[s].value_counts().max()
3
explanation
(~s).cumsum()- a fairly standard way to create separate groups True/False
0 1
1 1
2 2
3 2
4 2
5 2
6 3
7 4
dtype: int64
, , , 2, . , False ( True (~s)). , .
(~s).cumsum()[s]
1 1
3 2
4 2
5 2
dtype: int64
2, . value_counts max.
2
factorize bincount
a = s.values
b = pd.factorize((~a).cumsum())[0]
np.bincount(b[a]).max()
3
, 1. , max. pd.factorize 0 . , (~a).cumsum(), . , , .
pd.factorize np.bincount, , . .
3
2, :
a = s.values
np.bincount((~a).cumsum()[a]).max()
3