Обработка строк в pandas

Всем привет.. есть такой набор данных в датафрейме

                      0        2        3        5
0     2021-03-23 07:06:27.758  1.19236  1.19237  6
1     2021-03-23 07:06:31.898  1.19237  1.19238  6
2     2021-03-23 07:06:33.196  1.19237  1.19240  4
3     2021-03-23 07:06:33.919  1.19237  1.19238  4
4     2021-03-23 07:06:36.596  1.19237  1.19239  4

И я встал на таком моменте: задача такая: нужен чтобы в брались значения в столбцах 2 и 3, сверялись со значениями в тех-же столбцах выше и если значения хоть по одному из столбцов изменялось в меньшую сторону, то в столбце 5 менялось на отрицательное значение.

к примеру из дф выше

                      0        2        3         5
0     2021-03-23 07:06:27.758  1.19236  1.19237   6
1     2021-03-23 07:06:31.898  1.19237  1.19238   6
2     2021-03-23 07:06:33.196  1.19237  1.19240   4
3     2021-03-23 07:06:33.919  1.19237  1.19238  -4
4     2021-03-23 07:06:36.596  1.19237  1.19239   4

Ответы (2 шт):

Автор решения: strawdog

попробуйте так:

df["5"] = np.where(df["2"].diff().lt(0)|df["3"].diff().lt(0), df["5"]*-1, df["5"])

df:

                         0        2        3  5
0  2021-03-23 07:06:27.758  1.19236  1.19237  6
1  2021-03-23 07:06:31.898  1.19237  1.19238  6
2  2021-03-23 07:06:33.196  1.19237  1.19240  4
3  2021-03-23 07:06:33.919  1.19237  1.19238 -4
4  2021-03-23 07:06:36.596  1.19237  1.19239  4
→ Ссылка
Автор решения: MaxU

еще одно решение:

df.loc[df[["2","3"]].diff().lt(0).any(axis=1), "5"] *= -1

результат:

In [86]: df
Out[86]:
                         0        2        3  5
0  2021-03-23 07:06:27.758  1.19236  1.19237  6
1  2021-03-23 07:06:31.898  1.19237  1.19238  6
2  2021-03-23 07:06:33.196  1.19237  1.19240  4
3  2021-03-23 07:06:33.919  1.19237  1.19238 -4
4  2021-03-23 07:06:36.596  1.19237  1.19239  4
→ Ссылка