Pandas如何获取首次满足futures_price高于prices_df的日期
实现方案
需求为按时间顺序逐位比对期货价格High值与对应阈值,返回首个满足High值大于阈值的日期,匹配成功后立刻终止,忽略后续所有记录。示例场景下预期返回值为2022-05-05。
核心逻辑
- 由于
prices_df的顺序和future_prices的日期行顺序完全一一对应,直接按位置做向量比对即可,不需要写循环 - 生成布尔判断掩码后,直接取第一个为True的位置对应的日期索引,就是目标结果
- 匹配到第一个结果后不会再遍历后续行,符合终止要求
修正后完整代码
import pandas as pd prices_df = [1106, 1098, 1090.625, 1082.577, 1074.52] future_dates = {'Date': ['2022-05-02', '2022-05-03', '2022-05-04', '2022-05-05', '2022-05-06'], 'High': [1020, 1005, 966, 2100, 2000], } future_prices = pd.DataFrame(future_dates) future_prices = future_prices.set_index('Date') # 逐位置生成判断条件 break_condition = future_prices['High'].to_numpy() > prices_df # 取第一个满足条件的日期赋值 df3.loc[i, 'Break_date'] = future_prices.index[break_condition][0]
结果校验
逐行比对结果如下,完全符合预期:
- 2022-05-02:High值1020 < 阈值1106,不触发
- 2022-05-03:High值1005 < 阈值1098,不触发
- 2022-05-04:High值966 < 阈值1090.625,不触发
- 2022-05-05:High值2100 > 阈值1082.577,触发,直接返回该日期
- 2022-05-06:匹配已终止,即使High值2000 > 阈值1074.52也不会被读取
边界场景提示:如果存在所有日期都不满足阈值的情况,可以先判断
break_condition.any()是否为True,为True时再取首个日期,否则可以给Break_date赋值空值或自定义标记,避免索引越界报错。
内容的提问来源于stack exchange,提问作者Artrade
相关产品推荐
相关产品推荐

