Метод для просмотра _lagged значения называется shift
, а затем мы проверяем, являются ли значения положительными, отрицательными или нулевыми с помощью конструкции if-else.
Итак, сначала мы построим столбец sign
. Логика может быть упакована в 1 строку.
df['sign'] = (df.v_out - df.v_out.shift()).apply(lambda x: 0.05 if x > 0 else -0.05 if x < 0 else 0)
Кстати, я часто пишу этот код в интерактивном режиме, но рекомендую разбить его на несколько строк, чтобы легче было следовать логике, если еебудет сохранен в файл)
Затем, чтобы сделать столбец cumul
можно сделать с помощью метода cumsum
.
df['cumul'] = df.sign.cumsum()
ОкончательныйDF выглядит так:
secs v_out sign cumul
0 0.0 -1.179100 0.00 0.00
1 15.0 -1.179100 0.00 0.00
2 18.0 -1.179200 -0.05 -0.05
3 33.0 -1.181800 -0.05 -0.10
4 48.0 0.029461 0.05 -0.05`