在以下 Pandas 数据框中,如何根据“acqDis_nondrv”获取第三列“spread”,
acqDis_nondrv Close nondrvPrice
D 8 32.015
A 16 5.729
D 20 20.00
A 16 5.729
A 16 5.729
预期结果
acqDis_nondrv Close nondrvPrice spread
D 8 32.015. 24.015
A 16 5.729 10.271
D 20 20.00 0
A 16 5.729 10.271
A 16 5.729. 10.271
基本上我想要完成的是获取 'Close
' 和 ' 之间的差异
nondrvPrice
' 基于 acqDis_nondrv
列。
我试过了
df['spread']=df['Close']-df['nondrvPrice']
如何为我的需求添加条件?
如果 acqDis_nondrv == 'A' 那么 df['Close']-df['nondrvPrice'],
如果 acqDis_nondrv == 'D' df['nondrvPrice']-df['Close']
答案 0 :(得分:1)
您可以使用 np.where
,例如:
import numpy as np
df['spread'] = np.where(df['acqDis_nondrv'] == 'A', df['Close'] - df['nondrvPrice'],
df['nondrvPrice'] - df['Close'])
df
acqDis_nondrv Close nondrvPrice spread
0 D 8 32.015 24.015
1 A 16 5.729 10.271
2 D 20 20.000 0.000
3 A 16 5.729 10.271
4 A 16 5.729 10.271
请注意,此答案假定您的列 acqDis_nondrv 只能取值“A”和“D”,如果不是这种情况,请在您的问题中说明。
答案 1 :(得分:0)
使用 apply()
方法:
df['spread']=df.apply(lambda x: x['Close']-x['nondrvPrice'] if x['acqDis_nondrv'] == 'A' else(x['nondrvPrice']-x['Close'] if x['acqDis_nondrv'] == 'D' else x ),axis=1)
现在如果你打印 df
你会得到你想要的输出:
acqDis_nondrv Close nondrvPrice spread
0 D 8 32.015 24.015
1 A 16 5.729 10.271
2 D 20 20.000 0.000
3 A 16 5.729 10.271
4 A 16 5.729 10.271
注意:如果您熟悉 numpy
,请使用 where()
方法(@sophocles 给出的答案),因为它更有效(速度明智)
答案 2 :(得分:0)
你可以这样做:
df['spread']=df['Close']-df['nondrvPrice']
df.loc[df['acqDis_nondrv'].eq('D'), 'spread'] = df['nondrvPrice'] - df['Close']