You need to enable JavaScript to run this app. Python Pandas判断当日Open是否落在前一日High、Low区间的实现问题
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 05:24:10