Используйте groupby
и cumsum
:
df['s_cumsum'] = df.s_number.groupby(df.s_number.isna().cumsum()).cumsum()
df
Index s_number s_cumsum
0 0 1.0 1.0
1 1 4.0 5.0
2 2 6.0 11.0
3 3 NaN NaN
4 4 7.0 7.0
5 5 2.0 9.0
6 6 3.0 12.0
Обратите внимание, что если "s_number" является столбцом строк, используйте
df['s_number'] = pd.to_numeric(df['s_number'], errors='coerce)
... сначала, чтобы получить плавающую колонку с NaNs.
Если вы хотите заполнить NaN,
df['s_cumsum'] = (df.s_number.groupby(df.s_number.isna().cumsum())
.cumsum()
.fillna(0, downcast='infer'))
df
Index s_number s_cumsum
0 0 1.0 1
1 1 4.0 5
2 2 6.0 11
3 3 NaN 0
4 4 7.0 7
5 5 2.0 9
6 6 3.0 12