Python Pandas如何标记属于连续4次价格上涨区间的对应数据行
Pandas标记连续4次价格上涨区间实现方案
完整实现代码
import pandas as pd # 若还未处理diff1的首个空值,先执行这行填充为0 df['diff1'] = df['Close'].diff().fillna(0) # 1. 生成布尔序列,标记当前行是否较前一行上涨 is_rise = df['diff1'] > 0 # 2. 滑动窗口大小设为3,识别连续3次上涨的结束位置(对应4个连续上涨的价格行) consecutive_end_mask = is_rise.rolling(window=3).sum() == 3 # 3. 初始化标记列为False df['is_consecutive'] = False # 4. 批量标记所有符合条件的区间行 for end_idx in consecutive_end_mask[consecutive_end_mask].index: df.loc[end_idx - 3 : end_idx, 'is_consecutive'] = True
逻辑说明
连续4个逐次上涨的价格,对应3次正的差值(diff1>0),因此用大小为3的滑动窗口判断是否存在连续3次上涨,窗口的最后一个索引就是连续4个上涨行的结束位置。找到所有结束位置后,将该位置往前推3行到结束位置的所有行统一标记为True,刚好覆盖4个连续上涨的行。
该方案完全匹配你给出的示例规则,运行后仅索引0-3会被标记为True,其余行均为False。如果遇到更长的连续上涨场景(比如连续5天价格上涨),所有属于该区间的行都会被标记为True,符合需求。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

