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

如何在pandas dataframe中提取连续1序列之后最多2行的0值行

实现思路

先定位所有连续1序列的结束位置,再对每个结束位置取后续1-2行的记录,最后过滤出val为0的行即可。

完整代码

import pandas as pd

# 构造示例数据,实际使用时替换为你自己的df即可
data = {
    'Day': ['Day1','Day2','Day3','Day4','Day5','Day6','Day7','Day8','Day9','Day10',
            'Day11','Day12','Day13','Day14','Day15','Day16','Day17','Day18','Day19','Day20',
            'Day21','Day22','Day23','Day24','Day25'],
    'val': [0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,1,0,1,1,1]
}
df = pd.DataFrame(data)

# 1. 标记连续1序列的结束行:当前行val为1,下一行val为0
end_of_one_seg = (df['val'] == 1) & (df['val'].shift(-1) == 0)
# 拿到所有连续1结束行的索引
end_index_list = df[end_of_one_seg].index

# 2. 收集每个结束行后面最多2行的索引
target_index = []
for end_idx in end_index_list:
    for offset in (1, 2):
        if end_idx + offset < len(df):
            target_index.append(end_idx + offset)

# 3. 筛选结果,去重且保留val为0的行
result = df.loc[target_index].drop_duplicates().query('val == 0').reset_index(drop=True)

print(result)

输出结果

Day  val
0   Day9    0
1  Day10    0
2  Day16    0
3  Day17    0
4  Day22    0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:45:01