Py学习  »  Python

python基于其他列值设置列的值

Kowsi • 3 年前 • 1255 次点击  

我有一个 df

Side ref_price price price_diff
0    100        110
1    110        100

我想继续 price_diff 基于边值的值。

if side==0:
   df['price_diff']=df['ref_price']*df['price']
else if side==1:
   df['price_diff']=df['ref_price']*df['price']*-1

试过

df.loc[df.Side == 0, 'price_diff'] = (df['price']*df['ref_price'])

不工作,抛出错误。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/129008
 
1255 次点击  
文章 [ 2 ]  |  最新文章 3 年前
Corralien
Reply   •   1 楼
Corralien    3 年前

你可以用 np.where :

df['price_diff'] = np.where(df['side'] == 0,
                            df['ref_price'] * df['price'],
                            df['ref_price'] * df['price'] * -1)
print(df)

# Output
   side  ref_price  price  price_diff
0     0        100    110       11000
1     1        110    100      -11000
enke
Reply   •   2 楼
enke    3 年前

你可以用 "Side" 列作为 numpy.where :

df['price_diff'] = np.where(df['Side'].astype(bool), df['ref_price']*df['price']*-1, df['ref_price']*df['price'])

或者在这种特定情况下,使用“Side”列值作为 -1 :

df['price_diff'] = df['ref_price']*df['price']*(-1)**df['Side']

输出:

   Side  ref_price  price  price_diff
0     0        100    110       11000
1     1        110    100      -11000