Для следующих df
я хочу вычислить совокупную сумму столбца Inst_Dist
и сохранить как Cumu_Dist
, в то время как значение WDir_Deg
остается неизменным.Когда значение в WDir_Deg
изменяется, мне нужно перезапустить кумулятивную сумму.
Поэтому
index | WDir_Deg | Inst_Dist | Cumu_Dist
0 | 289 | 20 | NaN
1 | 285 | 17 | NaN
2 | 285 | 19 | NaN
3 | 287 | 19 | NaN
4 | 289 | 10 | NaN
становится
index | WDir_Deg | Inst_Dist | Cumu_Dist
0 | 289 | 20 | 20
1 | 285 | 17 | 17
2 | 285 | 19 | 36
3 | 287 | 19 | 19
4 | 289 | 10 | 10
Моя не-идиоматическая (чрезвычайномедленно) Python-код приведен ниже.Буду очень признателен, если кто-нибудь подскажет, как сделать код быстрее и понятнее.
prev_angle = -1
curr_cumu_dist = 0
for curr_ind in df.index:
curr_angle = df.loc[curr_ind, 'WDir_Deg']
if prev_angle == curr_angle:
curr_cumu_dist += df.loc[curr_ind, 'Inst_Dist']
df.loc[curr_ind, 'Cumu_Dist'] = curr_cumu_dist
else:
prev_angle = curr_angle
curr_cumu_dist = df.loc[curr_ind, 'Inst_Dist']
df.loc[curr_ind, 'Cumu_Dist'] = curr_cumu_dist