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

Pandas DataFrame 截取满足条件行及其前后指定行数的实现方法

Pandas 区间截取简便方案

不用提前提取满足条件的索引,直接用布尔掩码加滚动窗口即可实现需求,全程无额外中间步骤。

前置准备(样例数据构造)

import pandas as pd
# 构造示例DataFrame,默认整数索引
df = pd.DataFrame({
    'col2': ['a','b','c','d','e','f','g','h','i','j']
})
# 定义匹配条件,示例为col2值等于'e'(对应索引为4的行)
match_cond = df['col2'] == 'e'

需求1:截取匹配行及其前3行

用滚动窗口向前覆盖3行,窗口内只要存在匹配行就保留当前行:

# 窗口大小为4:当前行+前3行,只要窗口内有匹配项就标记为保留
mask = match_cond.rolling(4, min_periods=1).max().astype(bool)
res1 = df[mask]

返回结果为索引2、3、4的行,完全符合示例要求。

需求2:截取匹配行、前3行及后3行

开启滚动窗口居中对齐,覆盖前后各3行范围:

# 窗口大小为7:前3行+当前行+后3行,居中对齐,窗口内有匹配项就标记为保留
mask = match_cond.rolling(7, min_periods=1, center=True).max().astype(bool)
res2 = df[mask]

返回结果为索引2到7的行,完全符合示例要求。

额外说明

  • 即使有多个匹配行,该方案会自动合并重叠区间,不会返回重复行
  • 匹配行靠近DataFrame开头/结尾时,会自动截断到数据集边界,不会出现索引越界错误
  • 全程基于向量化操作,数据量较大时效率远高于先取索引再切片的分步方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:15:05