Python Pandas判断当日Open是否落在前一日High、Low区间的实现问题
问题原因
你写的代码报错是因为apply按行遍历的时候,拿到的row是代表单条数据的Series,里面High、Low对应的值都是单个浮点数,没有DataFrame/Series才有的shift方法。另外你之前用的shift(-1)是取后一行数据,要取前一交易日的数据应该用shift(1)。
实现方案
先把前一交易日的高低点平移成单独的列,再在按行判断的函数里直接调用即可,后续要新增判断条件直接在函数里加分支就行:
import pandas as pd # 先新增两列存前一交易日的High、Low df['prev_high'] = df['High'].shift(1) df['prev_low'] = df['Low'].shift(1) def openloc(row): # 首行没有前一交易日数据,返回空值 if pd.isna(row['prev_high']): return pd.NA # 判断Open是否在前一交易日高低点区间内 if row['prev_low'] <= row['Open'] <= row['prev_high']: return 'yes' else: return 'no' # 后续可以扩展更多分支,比如返回'above'/'below'等自定义结果 df['Inrange?'] = df.apply(openloc, axis=1) # 不需要保留前一交易日数据的话可以删除辅助列 df = df.drop(columns=['prev_high', 'prev_low'])
运行后得到的结果和你预期一致:
Date High Low Open Inrange? 0 2/5/21 100 10 50 <NA> 1 3/5/21 110 5 65 yes 2 4/5/21 220 180 200 no
内容的提问来源于stack exchange,提问作者elzzup
相关产品推荐
相关产品推荐

