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

锚定滑动窗口(Anchored sliding window)开发需求技术问询

嘿,这个需求我很熟悉!固定起始点、动态扩展终点的滑动窗口逻辑,用Python的pandas就能轻松实现。我给你整理了具体的思路和代码示例,你可以直接套用或者根据自己的需求修改:

核心实现思路
  • 先定位固定的窗口起始点(比如你说的0.10),找到它在数据框中的位置
  • 从起始点开始,每次以1个单位的增量扩展窗口终点(不管是按行索引还是数值范围,都能灵活处理)
  • 对每个窗口内的Speed列执行你指定的条件函数
  • 一旦满足条件,就在Out列对应的位置生成输出;如果没满足,就继续扩展窗口
代码示例(按行索引扩展窗口)

这是最常用的按行扩展的场景,假设你的数据框包含位置列和Speed列:

import pandas as pd
import numpy as np

# 先构造一个示例数据框,你可以替换成自己的真实数据
df = pd.DataFrame({
    'Position': [0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.35],
    'Speed': [12, 15, 18, 22, 19, 25, 21]
})

# 固定窗口起始点的Position值
start_pos = 0.10
# 找到起始点对应的行索引
start_idx = df[df['Position'] == start_pos].index[0]

# 初始化Out列,默认填充NaN
df['Out'] = np.nan

# ----------------------
# 这里替换成你自己的指定函数!
# 示例:判断窗口内Speed的平均值是否大于20
def check_condition(speed_series):
    return speed_series.mean() > 20
# ----------------------

# 从起始点开始,依次扩展窗口终点(每次多包含一行)
for end_idx in range(start_idx, len(df)):
    # 提取当前窗口的Speed数据
    window_speed = df.loc[start_idx:end_idx, 'Speed']
    # 检查条件是否满足
    if check_condition(window_speed):
        # 满足条件的话,在Out列的终点行写入结果(这里写的是窗口平均值,你可以改)
        df.loc[end_idx, 'Out'] = round(window_speed.mean(), 2)
        # 如果只需要第一个满足条件的窗口,就加个break终止循环
        # break

# 查看结果
print(df)
按数值范围扩展窗口(如果你的终点是按Position数值增量调整)

如果你的窗口终点是按Position的数值(比如从0.10到0.15,再到0.20这种增量)来扩展,代码可以这么改:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'Position': [0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.35],
    'Speed': [12, 15, 18, 22, 19, 25, 21]
})

start_pos = 0.10
# 获取所有大于等于起始点的Position值,按顺序排列
possible_end_pos = df[df['Position'] >= start_pos]['Position'].sort_values().tolist()

df['Out'] = np.nan

# 替换成你自己的条件函数,示例:窗口内Speed的最大值是否大于22
def check_condition(speed_series):
    return speed_series.max() > 22

for end_pos in possible_end_pos:
    # 提取当前数值范围内的Speed数据
    window_speed = df[(df['Position'] >= start_pos) & (df['Position'] <= end_pos)]['Speed']
    if check_condition(window_speed):
        # 在对应终点Position的行写入结果(这里写的是窗口最大值)
        df.loc[df['Position'] == end_pos, 'Out'] = window_speed.max()
        # 可选:如果只需要第一个满足条件的结果,取消下面的注释
        # break

print(df)
自定义调整说明
  • 修改起始点:把start_pos改成你实际需要的固定值(比如0.10)
  • 替换条件函数:完全重写check_condition函数,比如改成判断求和是否大于100,或者所有值都大于15等等
  • 调整输出内容:在满足条件时,你可以把Out列的内容改成任意你需要的输出(比如窗口的统计值、自定义标记等)
  • 终止逻辑:如果只需要第一个满足条件的窗口,就在满足条件时加上break语句,停止后续扩展

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:33:04