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
相关产品推荐
相关产品推荐

