Search code examples
pythonpandastimedeltacumsum

pandas cumsun - reset after hiting max or reset when ID change


According to this question

Python pandas cumsum() reset after hitting max

I want to reset cumsum after hiting max or reset when ID change.

Transaction_ID  Time            TimeDelta       CumSum[ms]
1              00:00:04.500     00:00:00.000    000
1              00:00:04.600     00:00:00.100    100
1              00:00:04.762     00:00:00.162    262
2              00:00:05.543     00:00:00.781    1043
2              00:00:09.567     00:00:04.024    5067
2              00:00:10.654     00:00:01.087    6154
2              00:00:14.300     00:00:03.646    9800
3              00:00:14.532     00:00:00.232    10032
3              00:00:16.500     00:00:01.968    12000
3             00:00:17.543     00:00:01.043    13043

Solution

  • Check the function in the link, and build the function with groupby

    def yourcumsum(x,maxvalue,lastvalue):
        newcum = []
        for row in x:
            thisvalue =  row + lastvalue
            if thisvalue > maxvalue:
                thisvalue = 0
            newcum.append( thisvalue )
            lastvalue = thisvalue
        return newcum
    
    
    df['new'] = df.TimeDelta.dt.total_seconds()*1000
    
    df['new' = df.groupby('Transaction_ID')['new'].transform(lambda x : yourcumsum(x,5000,0))
    0       0.0
    1     100.0
    2     262.0
    3     781.0
    4    4805.0
    5       0.0
    6    3646.0
    7     232.0
    8    2200.0
    9    3243.0
    Name: new, dtype: float64