You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用pandas/matplotlib查找折线向上穿越指定水平线的有效日期点

实现方案

1. 核心逻辑说明

  • 首先识别所有向上穿越y=2的点位:即上一时刻x值小于2,当前时刻x值大于等于2
  • 给两次回落至0之间的区间标记为同一个上升周期,每个周期仅保留第一个穿越y=2的点位,自动过滤同周期内重复的穿越信号

2. 代码实现

首先完成信号计算与有效点筛选:

import pandas as pd
import matplotlib.pyplot as plt

# 1. 计算向上穿越2的信号
df['cross_up_2'] = (df['x'] >= 2) & (df['x'].shift(1) < 2)
# 2. 计算回落至0的信号,用于划分上升周期
df['drop_to_0'] = (df['x'] <= 0) & (df['x'].shift(1) > 0)
# 3. 给每个上升周期打唯一ID,两次回落0之间为同一个周期
df['cycle_id'] = df['drop_to_0'].cumsum().shift(1).fillna(0).astype(int)
# 4. 每个周期仅保留第一个穿越点,按时间排序
valid_cross_points = df[df['cross_up_2']].groupby('cycle_id', as_index=False).head(1).sort_index()
# 5. 取前6个符合要求的日期
target_dates = valid_cross_points.head(6).index.tolist()

如果需要可视化验证结果,可以在原有绘图逻辑基础上添加标记:

# 原有绘图逻辑
plt.plot(df.index, df['x'], c='blue', label='x')
plt.axhline(y=2, c='purple', linestyle='--')
plt.axhline(y=5, c='purple', linestyle='--')
# 标记有效穿越点用于核对
plt.scatter(valid_cross_points.index, valid_cross_points['x'], c='red', s=50, label='有效穿越点')
plt.legend()
plt.show()

3. 结果输出

target_dates即为符合要求的6个日期索引,可直接打印查看。

内容的提问来源于stack exchange,提问作者Faiz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:45:03