Не меняя DataFrame по заданному условию произвести операцию со строками столбца

Имеется следующий DataFrame:

введите сюда описание изображения

Необходимо по условию: если в столбце "Усреднённая скорость" значение < 0, то значение в этой строке в столбце "Масштабный коэффициент" умножить на -1.

У меня получается сделать только с выделением столбца по условию:

df = df[df['Усреднённая скорость'] < 0]["Масштабный коэффициент"] * -1 

введите сюда описание изображения

Как не "ломая" первоначальный DataFrame умножить значения по заданному условию?

Ссылка на данные .csv.


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

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

Воспользуйтесь DataFrame.loc[]:

df.loc[df['Усреднённая скорость'] < 0, "Масштабный коэффициент"] *= -1

Демонстрация правильной работы решения для приведенного примера данных:

In [69]: df = pd.read_csv("Scale_factor_SensorID_16495_ser.№5.csv", sep=";", decimal=",", header=None)

In [70]: df
Out[70]:
        0      1           2         3         4
0       1   left   -0.998874  1.001128 -0.001345
1       1   left   -0.998646  1.001356  0.003246
2     120   left -119.810929  1.001578  0.002425
3     120   left -119.810709  1.001580  0.001975
4     120   left -119.810087  1.001585  0.001092
...   ...    ...         ...       ...       ...
7539    1  right    0.991193  1.008885 -0.002161
7540    1  right    0.991037  1.009044 -0.000399
7541    1  right    0.990894  1.009190 -0.003662
7542    1  right    0.990769  1.009317  0.001469
7543    1  right    0.990263  1.009833 -0.003643

[7544 rows x 5 columns]

In [71]: df.loc[df[2] < 0, 3] *= -1

In [72]: df
Out[72]:
        0      1           2         3         4
0       1   left   -0.998874 -1.001128 -0.001345
1       1   left   -0.998646 -1.001356  0.003246
2     120   left -119.810929 -1.001578  0.002425
3     120   left -119.810709 -1.001580  0.001975
4     120   left -119.810087 -1.001585  0.001092
...   ...    ...         ...       ...       ...
7539    1  right    0.991193  1.008885 -0.002161
7540    1  right    0.991037  1.009044 -0.000399
7541    1  right    0.990894  1.009190 -0.003662
7542    1  right    0.990769  1.009317  0.001469
7543    1  right    0.990263  1.009833 -0.003643

[7544 rows x 5 columns]
→ Ссылка