Как я могу кумулятивно складывать или вычитать значения, основанные на значениях других столбцов, используя Pandas? - PullRequest
0 голосов
/ 20 октября 2019

У меня есть информационный кадр ниже, который показывает выходное напряжение в секундах. Значение v_out основано на смещении +/- 0,05 сантиметра.

Таким образом, когда v_out становится более положительным, тогда происходит положительное смещение по сравнению с последним значением v_out. Когда v_out становится более отрицательным, смещение происходит в направлении -.

У меня есть начальный df, и я хочу добавить столбец sign, который сообщает, является ли v_out положительным или отрицательным на основе предыдущего значения v_out. И я хочу столбец cumulative, который отслеживает добавленную промежуточную сумму столбца sign.

Начальный df

     secs     v_out
0     0.0 -1.179100
1    15.0 -1.179100
2    18.0 -1.179200
3    33.0 -1.181800
4    48.0  0.029461

Что я хочу

     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

1 Ответ

0 голосов
/ 20 октября 2019

Метод для просмотра _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`   
...