IIU C, можно так:
ff['Output2'] = ff.loc[(ff['Input'] == 100).cummax(), 'Input'].cumsum().mul(-1).add(200)
ff['Output2'] = ff['Output2'].fillna(ff['Input'])
Вывод:
Input Output Output2
0 0 0 0.0
1 50 50 50.0
2 0 0 0.0
3 49 49 49.0
4 4 4 4.0
5 100 100 100.0
6 2 98 98.0
7 4 94 94.0
8 1 93 93.0
9 5 88 88.0
10 6 82 82.0
11 3 79 79.0
12 2 77 77.0
Может немного иначе:
m = ff['Input'].eq(100).cummax()
ff['Output3'] = ff['Input'].mask(m, 200 - ff.loc[m, 'Input'].cumsum())
Вывод:
Input Output Output2 Output3
0 0 0 0.0 0
1 50 50 50.0 50
2 0 0 0.0 0
3 49 49 49.0 49
4 4 4 4.0 4
5 100 100 100.0 100
6 2 98 98.0 98
7 4 94 94.0 94
8 1 93 93.0 93
9 5 88 88.0 88
10 6 82 82.0 82
11 3 79 79.0 79
12 2 77 77.0 77
Просто показаны три разных результата: ваш ожидаемый, мой первый расчет и второй расчет.