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

如何用Python实现矩阵转置的滚动(Rolling/Siding)窗口处理

用Python实现DataFrame列的3行滚动窗口转置为单行3元素

需求说明

将DataFrame每列的连续3行(3×1矩阵)转置为单行的3个元素(1×3矩阵),实现自动化处理,适用于约300行数据,示例输入如下:

import pandas as pd

df = pd.DataFrame({'A1': [1,1,0,1],
                   'A2': [1,0,0,0],
                   'A3': [1,0,1,1],
                   'A4': [1,0,0,0],
                   })

解决方案

利用pandas的滚动窗口(Rolling Window)功能,遍历每一列处理窗口数据,转置后展开为新列:

window_size = 3
result_list = []

# 遍历每一列处理滚动窗口
for col in df.columns:
    # 获取滚动窗口并将窗口内数据转为Series(展开为3列)
    rolled_cols = df[col].rolling(window=window_size).apply(
        lambda x: pd.Series(x.values), raw=True
    )
    # 重命名新列,区分窗口内的不同位置
    rolled_cols.columns = [f"{col}_{idx+1}" for idx in range(window_size)]
    result_list.append(rolled_cols)

# 合并所有处理后的列
final_df = pd.concat(result_list, axis=1)

# 可选:移除前两行无有效窗口的NaN数据
final_df = final_df.dropna().reset_index(drop=True)

print(final_df)

输出结果

处理后的final_df会将每列的连续3行转为对应3个新列,示例输出如下:

A1_1  A1_2  A1_3  A2_1  A2_2  A2_3  A3_1  A3_2  A3_3  A4_1  A4_2  A4_3
0   1.0   1.0   0.0   1.0   0.0   0.0   1.0   0.0   1.0   1.0   0.0   0.0
1   1.0   0.0   1.0   0.0   0.0   0.0   0.0   1.0   1.0   0.0   0.0   0.0

说明

  • 窗口大小设为3,确保每次取连续3行数据
  • 每个窗口内的3个元素会被展开为3个新列,命名规则为原列名加_1/_2/_3,对应窗口内的第1/2/3行
  • 前两行因不足3个窗口数据会生成NaN,可通过dropna()移除,适合处理300行数据时保留有效结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:04:41