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

pandas筛选DataFrame行时如何编写前置连续行判断条件

实现代码

second_condition可以通过序列移位判断前置连续行的匹配情况实现,完整可运行代码如下:

import pandas as pd

# 构造示例DataFrame,索引匹配题目展示的1~8序号
dataframe = pd.DataFrame(
    {
        'first': [2, 2, 3, 4, 5, 8, 3, 5], 
        'second': [2, 1, 4, 6, 4, 8, 4, 6], 
        'third': [1, 0, 5, 3, 3, 4, 2, 6]
    },
    index=range(1, 9)
)

# 定义second_condition
s = dataframe['third'] < dataframe['second']
# 连续2行满足的情况:前2行全满足,前第3行(若存在)不满足
cond_k2 = s.shift(1, fill_value=False) & s.shift(2, fill_value=False) & (~s.shift(3, fill_value=False))
# 连续3行满足的情况:前3行全满足,前第4行(若存在)不满足
cond_k3 = s.shift(1, fill_value=False) & s.shift(2, fill_value=False) & s.shift(3, fill_value=False) & (~s.shift(4, fill_value=False))
# 连续4行满足的情况:前4行全满足,前第5行(若存在)不满足
cond_k4 = s.shift(1, fill_value=False) & s.shift(2, fill_value=False) & s.shift(3, fill_value=False) & s.shift(4, fill_value=False) & (~s.shift(5, fill_value=False))
second_condition = cond_k2 | cond_k3 | cond_k4

# 执行筛选
res_index = dataframe[(dataframe['first'] < dataframe['second']) & (second_condition)].index
print(res_index) # 输出 Int64Index([3, 7, 8], dtype='int64'),完全匹配预期结果
逻辑说明
  • 先逐行生成基础布尔序列s,标记每行是否满足third < second
  • 借助pandas.Series.shift()方法将序列向后偏移,直接取当前行往前数第n行的判断结果,不存在前置行的边界位置统一填充False
  • 分别校验连续长度为2、3、4三种合法区间的情况:要求对应数量的紧邻前置行全部满足s=True,且更靠前1行(如果存在)满足s=False,避免把长度超过4的连续片段误判
  • 三种合法情况取或运算,得到最终的第二个筛选条件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:42:25