# Cumulative sum of first occurence of consecutive True values in a group in Pandas

I have a Pandas dataframe columns A, B, C and D. I would like the Desired Column as follows:

Grouping by [‘A’,’B’,’C’], I would like the Desired Column to show the cumulative sum of the FIRST CONSECUTIVE True values in column D.

A B C D Desired Column
100 AAA 001 False 0
100 AAA 001 False 0
200 BBB 055 True 1
200 BBB 055 True 2
200 BBB 055 True 3
200 BBB 055 False 3
200 BBB 055 True 3
300 CCC 099 False 0
300 CCC 099 True 0

A False value stops the cumulative sum in a group, and any True values after that False are not considered.

I want to use this table to calculate an aggregate one:

A B C Max(Desired Column)
100 AAA 001 0
200 BBB 055 3
300 CCC 099 0

You can use `cummin` to mark all values after `False` as `False` and then calculate `cumsum`:

```df['Desired Column'] = df.groupby(['A', 'B', 'C']).D.transform(lambda x: x.cummin().cumsum())

df
A    B   C      D  Desired Column
0  100  AAA   1  False               0
1  100  AAA   1  False               0
2  200  BBB  55   True               1
3  200  BBB  55   True               2
4  200  BBB  55   True               3
5  200  BBB  55  False               3
6  200  BBB  55   True               3
7  300  CCC  99  False               0
8  300  CCC  99   True               0
```

If you only need the aggregate column, then you can just find the index of the first `False` with `argmin`:

```df.groupby(['A', 'B', 'C'], as_index=False).D.agg(
lambda x: len(x) if x.all() else x.argmin()
)

A    B   C  D
0  100  AAA   1  0
1  200  BBB  55  3
2  300  CCC  99  0
```