Обработка строк в 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