PythonPandas-将一行中的一个值与前一行中两个不同列的两个不同值进行比较
所以我有一个数据框 df:
Date High Low Open
2/5/21 100 10 50
3/5/21 110 5 65
4/5/21 220 180 200
我想使用 if 语句查看当天的开盘价是否在前一天的范围内。我想使用 if 语句,因为我将来可能想添加更多条件。
我尝试创建一个函数:
def openloc(row):
if row['Open'] <= row['High'].shift(-1) & row['Open'] >= row['Low'].shift(-1):
return 'Yes'
df['inrange?'] = df.apply(openloc, axis = 1)
但我不断收到错误消息:'float' 对象没有属性 'shift'
有一个更好的方法吗?
我想要的输出是这样的:
Date High Low Open Inrange?
2/5/21 100 10 50 nan
3/5/21 110 5 65 yes
4/5/21 220 180 200 no
我不想返回一个布尔值,因为最终我可能想要添加比是或否更多的信息
回答
您可以使用矢量化操作,无需应用,使用between和shift:
df.assign(Inrange = df.Open.between(df.Low.shift(-1), df.High.shift(-1))
.shift()
.map({True:'Yes', False:'No'}))
Date High Low Open Inrange
0 2/5/21 100 10 50 NaN
1 3/5/21 110 5 65 Yes
2 4/5/21 220 180 200 No
THE END
二维码