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

如何使用滑动窗口按行(axis=1)拼接Pandas DataFrame数据?

如何按行以滑动窗口方式拼接Pandas数据?

给定如下测试数据:

import pandas as pd

test = {
    't':[0,1,2,3,4,5], 
    'A':[1,1,1,2,2,2], 
    'B':[9,9,9,9,8,8], 
    'C':[1,2,3,4,5,6]
}

df = pd.DataFrame(test)

你尝试用循环拼接的方式实现滑动窗口横向拼接,但得到错误结果。可以通过移位拼接的方式实现预期的滑动窗口横向拼接效果,以下是正确实现:

正确实现代码

window_size = 2

# 生成窗口内后续行的非t列数据,添加后缀区分窗口位置
shifted_cols = []
for win_step in range(window_size):
    # 移位win_step+1行,只保留A/B/C列,并重命名列
    shifted = df.drop('t', axis=1).shift(-(win_step + 1)).add_suffix(f'_win{win_step+1}')
    shifted_cols.append(shifted)

# 拼接原t列与所有窗口列
result_df = pd.concat([df[['t']]] + shifted_cols, axis=1)
# 删除因移位产生的空值行(最后window_size行无对应窗口数据)
result_df = result_df.dropna().reset_index(drop=True)

print(result_df)

代码说明

  1. 移位处理:通过shift(-n)获取当前行之后第n行的A/B/C列数据,用add_suffix给列名加上窗口标记(如A_win1),避免列名重复冲突。
  2. 横向拼接:将原数据的t列与所有移位后的窗口列横向拼接,得到每行对应的滑动窗口数据。
  3. 清理空值:移位后最后window_size行没有对应的后续窗口数据,会产生空值,直接删除即可。

原代码问题分析

  • 索引计算错误:原代码中row_idx+window_size会超出数据索引范围,导致拼接逻辑混乱。
  • 列名无区分:直接拼接同名列会导致列名重复,无法区分窗口内的不同行数据。
  • 循环范围不合理:原循环范围会遗漏部分有效行,导致结果行数不符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 03:35:15