Я пытаюсь перебрать строки в df и подсчитать последовательные строки, когда определенное значение равно NaN или 0, и начать подсчет, если значение изменится с NaN или 0. Я хотел бы получить что-то вроде этого:
Value Period
0 1
0 2
0 3
NaN 4
21 NaN
4 NaN
0 1
0 2
NaN 3
Я написал функцию, которая принимает фрейм данных в качестве аргумента и возвращает его с дополнительным столбцом, который обозначает число:
def calc_period(df):
period_x = []
sum_x = 0
for i in range(1,df.shape[0]):
if df.iloc[i,0] == np.nan or df.iloc[i,0] == 0:
sum_x += 1
period_x.append(sum_x)
else:
period_x.append(None)
sum_x = 0
period_x.append(sum_x)
df['period_x'] = period_x
return df
Функция работает хорошо, когда значение равно 0. Но когда значение равно NaN, счетчик также равен NaN, и я получаю следующий результат:
Value Period
0 1
0 2
0 3
NaN NaN
NaN NaN