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

如何在DataFrame中输出指定值所在行的上下N行(含目标行)

问题描述

我的某列中存在以数值777表示的分类变量,我希望在识别到该列中的777时,输出其所在行的上下3行数据。目前我已实现输出上下1行及目标行的功能,代码如下,请问如何修改以实现输出3行或任意行数的上下行?

m = df['ResetPoint'] == 777
df = df[m.shift(-1)|m.shift()|m]
解决方案

你可以通过定义变量n指定需要保留的上下行数,生成包含目标行及上下n行的掩码,最终筛选出这些行,核心逻辑是把目标行、向上偏移1到n行、向下偏移1到n行的所有行标记出来。

方法一:循环生成掩码

import pandas as pd

n = 3  # 可替换为任意需要的行数,比如1、5等
m = df['ResetPoint'] == 777
# 初始化全为False的掩码
mask = pd.Series(False, index=df.index)
# 遍历偏移量,标记所有符合条件的行
for k in range(-n, n + 1):
    mask |= m.shift(k, fill_value=False)
# 筛选结果
df_result = df[mask]

方法二:简洁的concat+any写法

import pandas as pd

n = 3
m = df['ResetPoint'] == 777
# 生成所有偏移后的掩码并取逻辑或
mask = pd.concat([m.shift(k, fill_value=False) for k in range(-n, n+1)], axis=1).any(axis=1)
df_result = df[mask]

说明

你原来的代码本质是n=1的情况,对应偏移量-1、0、1,也就是m.shift(-1)(向下1行)、m(目标行)、m.shift()(向上1行),和上面的逻辑完全一致。修改n的值就能灵活调整需要保留的上下行数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:10:02