how to get "expected_output" column with cumsum?
groupa = ['A', 'A', 'A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C']
valuesa = [-5, 4, 3, -4, -2, -2, 2, -2, 5, -2, 3, 6, 7, -11]
expected_output = [0, 4, 7, 3, 1, 0, 2, 0, 5, 3, 3, 9, 16, 5]
dfa = pd.DataFrame(list(zip(groupa, valuesa)), columns=['group', 'val'])
dfa['expected_output'] = pd.Series(expected_output)
dfa['cumsum_output'] = dfa.groupby('group')['val'].cumsum()
nega = dfa['val'] < 0
dfa['output'] = dfa['val'].groupby(
[nega[::-1].cumsum(), dfa['group']]).cumsum().clip(0)
dfa
group val expected_output cumsum_output output
0 A -5 0 -5 0
1 A 4 4 -1 4
2 A 3 7 2 7
3 A -4 3 -2 3
4 A -2 1 -4 0
5 A -2 0 -6 0
6 A 2 2 -4 2
7 B -2 0 -2 0
8 B 5 5 3 5
9 B -2 3 1 3
10 C 3 3 3 3
11 C 6 9 9 9
12 C 7 16 16 16
13 C -11 5 5 5
Cumsum on Pandas DF with reset to zero for negative cumulative values