如何用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
相关产品推荐
相关产品推荐

