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

pandas筛选指定列值并提取其前后2500行对应另一列数据的方法问询

问题修复与实现代码

你原来的代码存在2个核心错误:

  1. df.loc是行索引器,需使用方括号[]而非圆括号,且你写法拿到的是匹配的行数据,不是行的整数位置,无法直接用于iloc切片
  2. 存在多个start匹配行时,直接切片只会处理第一个匹配位置,无法覆盖所有试验区间

正确实现如下:

import numpy as np

# 窗口大小:前后各2500行
WINDOW = 2500
# 拿到所有trialType为start的行的整数位置
start_positions = np.where(df['trialType'] == 'start')[0]
total_rows = len(df)
# 存储所有需要保留的行位置
keep_rows = []

for pos in start_positions:
    # 边界处理,避免下标越界
    left = max(0, pos - WINDOW)
    right = min(total_rows - 1, pos + WINDOW)
    keep_rows.extend(range(left, right + 1))

# 去重并按原数据顺序排序,避免重叠区间重复取数
keep_rows = sorted(list(set(keep_rows)))
# 提取结果
result = df.iloc[keep_rows].copy()

如果你的业务要求重叠区间的行要重复保留(不需要去重),删掉set()处理步骤即可:

keep_rows = sorted(keep_rows)

小数据示例验证

针对你给出的小数据示例,如果把窗口调整为前后各1行,start的位置是0和3:

  • 第一个start的区间是max(0,0-1)=0到min(5,0+1)=1,对应行0、1
  • 第二个start的区间是max(0,3-1)=2到min(5,3+1)=4,对应行2、3、4
  • 合并后取行0-4,结果符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:24:02