You need to enable JavaScript to run this app. Pandas如何筛选前一行status为A、后一行status为B的连续行
优惠活动
大模型
产品
解决方案
定价
更多

Pandas如何筛选前一行status为A、后一行status为B的连续行

实现方法

核心思路

利用shift()方法将status列向下偏移1行,即可在当前行直接比对下一行的status值,找到满足「当前为A,下一行是B」的位置后,同时保留当前行和下一行即可。

具体代码实现

1. 构造测试数据(可跳过,直接套用你自己的DataFrame即可)

import pandas as pd
data = {
    "Time": ["2020-11-27 08:51:49", "2020-11-27 09:32:49", "2020-11-27 09:32:50",
             "2020-11-27 12:05:08", "2020-11-27 12:10:08", "2020-11-27 12:10:58",
             "2020-11-27 12:12:12", "2020-11-27 12:31:15", "2020-11-27 12:31:17"],
    "status": ["A", "B", "C", "B", "C", "A", "A", "B", "C"],
    "phase": [1,1,1,2,2,2,3,3,3]
}
df = pd.DataFrame(data, index=range(1,10)) # 索引和示例保持一致从1开始

2. 筛选符合条件的行

# 找出满足当前行status为A,下一行status为B的行索引
cond = (df['status'] == 'A') & (df['status'].shift(-1) == 'B')
target_index = df[cond].index
# 把下一行的索引也加入待保留列表
keep_index = target_index.union(target_index + 1)
# 按原顺序取出保留的行
result = df.loc[keep_index]

3. 输出验证

打印result即可得到你需要的结果,和预期输出完全一致:

indexTimestatusphase
12020-11-27 08:51:49A1
22020-11-27 09:32:49B1
72020-11-27 12:12:12A3
82020-11-27 12:31:15B3

补充说明

如果你的数据未按时间顺序排序,记得先执行df = df.sort_values('Time').reset_index(drop=True)按时间排序后再执行筛选逻辑,保证行的先后顺序正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 03:54:03