Я хочу изменить знак столбца sum
на другое значение столбца apple
. Другими словами, всякий раз, когда он видит apple
, сумма имеет отрицательное значение. Я думал, что смогу сделать np.where((ef.fruit == 'apple'), (-1 * ef.sum), ef.sum)
, но это выдало мне ошибку. Как я могу преодолеть это?
import pandas as pd
data = {'id':["ab3e3", "psdds2", "pas13", "ccdf2", "dsda1"],
'fruit':["apple", "others", "organge", "watermelon", "apple"],
'sum':[2, 3, 6, 8, 3]}
ef = pd.DataFrame(data)
ef
id fruit sum
0 ab3e3 apple 2
1 psdds2 others 3
2 pas13 organge 6
3 ccdf2 watermelon 8
4 dsda1 apple 3
Простым способом сделать это было бы создать маску, где apple
соответствует -1
, а другие значения соответствуют 1
, а затем несколько:
df['sum'] *= np.where(df['fruit'].eq('apple'), -1, 1)
Выход:
>>> df
id fruit sum
0 ab3e3 apple -2
1 psdds2 others 3
2 pas13 organge 6
3 ccdf2 watermelon 8
4 dsda1 apple -3
Другим решением было бы использовать .loc
:
df.loc[df['fruit'] == 'apple', 'sum'] = -df['sum']
ef.loc[ef["fruit"]= = "apple", "sum"] *= -1
результат:
id fruit sum
0 ab3e3 apple -2
1 psdds2 others 3
2 pas13 organge 6
3 ccdf2 watermelon 8
4 dsda1 apple -3
Не называйте свой столбец оригинальной функцией панды, если вы вызываете его через []
, а не .
np.where((ef.fruit == 'apple'), (-1 * ef['sum']), ef['sum'])
Out[159]: array([-2, 3, 6, 8, -3], dtype=int64)