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

如何基于pandas DataFrame生成包含前序行、当前行和后x行的序列

问题解决方案

你的需求是构造包含1个前序行、当前行、x个后续行的序列,过滤首尾无效条目,我们提供两种实现方案:

方案1:索引切片法(更直观易维护)

直接通过数组索引切片构造序列,逻辑完全匹配你的规则,不需要额外处理窗口滑动逻辑:

import numpy as np

x = 3  # 替换为你需要的后续行数量
# 拆分特征和标签,和原有代码逻辑保持一致:每行除最后一个元素为特征,最后一个为标签
features = df.iloc[:, :-1].values
labels = df.iloc[:, -1].values

sequential_data = []
total_row = len(df)
# 遍历所有有效当前行的索引:最小为1(有前序行索引0),最大为 total_row - 1 -x(后面有x个后续行)
for current_idx in range(1, total_row - x):
    # 切片范围:前序行(current_idx-1)到最后一个后续行(current_idx +x)
    seq = features[current_idx - 1 : current_idx + x + 1]
    # 标签默认取当前行的标签,可根据需求自行调整
    current_label = labels[current_idx]
    sequential_data.append([np.array(seq), current_label])

效果验证

和你给出的示例完全匹配:df为0~10的单列数据、x=3时,current_idx=4对应切片为索引3到7,返回序列为[[3],[4],[5],[6],[7]]。

方案2:deque改造方案(和原有代码风格一致)

如果你希望沿用原有deque滑动窗口的写法,可以调整窗口大小和标签匹配逻辑:

import numpy as np
from collections import deque

sequential_data = []
x = 3  # 替换为你需要的后续行数量
window_size = x + 2  # 窗口总长度:1前序 +1当前 +x后续
slide_window = deque(maxlen=window_size)
all_rows = []  # 存储所有行的特征和标签,用于后续匹配当前行的标签

for row in df.values:
    feat = [n for n in row[:-1]]
    label = row[-1]
    all_rows.append((feat, label))
    slide_window.append(feat)
    # 窗口存满时构造序列
    if len(slide_window) == window_size:
        # 匹配当前行对应的标签:当前行是窗口的第二个元素,对应索引为当前总行数 -x -1
        current_label = all_rows[len(all_rows) - x -1][1]
        sequential_data.append([np.array(slide_window), current_label])

补充说明

如果你不需要拆分特征和标签,希望把整行数据都放入序列,直接把features = df.iloc[:, :-1].values替换为features = df.values即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:54:03