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

我不想返回一个布尔值,因为最终我可能想要添加比是或否更多的信息

回答

您可以使用矢量化操作,无需应用,使用betweenshift

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


以上是PythonPandas-将一行中的一个值与前一行中两个不同列的两个不同值进行比较的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>