如何基于Pandas DataFrame列值筛选出最后一组LHL模式的对应行
Pandas 匹配extremes列最后一个LHL连续模式的解法
isin()方法返回全量数据的原因是它仅校验单个单元格的值是否属于目标列表,不会判断连续顺序和相邻关系,因此只要值是L或H的行都会被匹配到。
你可以直接用Pandas原生的shift()偏移方法构造连续行匹配条件,全程向量化操作,不需要转字符串拼接处理,符合Pandas使用规范:
# 构造连续3行符合LHL模式的匹配条件,每行作为LHL的起始位置校验 match_cond = ( df['extremes'].eq('L') & df['extremes'].shift(-1).eq('H') & df['extremes'].shift(-2).eq('L') ) if match_cond.any(): # 取最后一个匹配到的LHL起始位置 last_lhl_start = match_cond[match_cond].index[-1] # 从起始位置取连续3行即为目标结果 res = df.loc[last_lhl_start:].head(3)
执行后res就是你需要的最后一组LHL对应的三行数据。如果你的DataFrame用的是默认整数索引,也可以将loc替换为iloc,逻辑完全一致。
内容的提问来源于stack exchange,提问作者lazarea
相关产品推荐
相关产品推荐

