如何基于指定窗口转置展平Pandas DataFrame,实现全量滑窗特征转换
问题解决代码与说明
完整修改后代码
import pandas as pd def data_process(data, window): total_rows = len(data) # 计算合法窗口总数:起始索引范围为0 ~ total_rows - window valid_window_cnt = total_rows - window + 1 res = [] for s in range(valid_window_cnt): # 取当前窗口的连续w行数据 window_data = data.iloc[s : s+window].reset_index(drop=True) # 构造当前窗口的特征与标签 feature = {} # 拼接A列的w个时序值 for i in range(window): feature[f"A{i+1}"] = window_data.loc[i, "A"] # 拼接B列的w个时序值 for i in range(window): feature[f"B{i+1}"] = window_data.loc[i, "B"] # 取窗口首行label作为L1特征 feature["L1"] = window_data.loc[0, "label"] # 取窗口末行label作为预测目标 feature["label"] = window_data.loc[window-1, "label"] res.append(feature) # 拆分X特征和Y标签 res_df = pd.DataFrame(res) X = res_df.drop("label", axis=1) Y = res_df["label"] return X, Y
效果测试
使用你提供的样例数据测试即可得到要求的输出:
# 构造样例输入数据 data = pd.DataFrame({ "tdelta": [1,2,3,4,5,6,7,8], "A": [11,24,44,77,12,39,85,1], "B": [21,45,65,22,64,9,11,45], "label": ["Lab1","Lab2","Lab3","Lab4","Lab5","Lab6","Lab7","Lab8"] }) X, Y = data_process(data, 4) # 合并查看完整结果 print(pd.concat([X,Y], axis=1))
核心修改说明
- 修正了原代码中变量未定义、列名拼写错误的问题
- 遍历所有合法窗口的起始位置,批量生成每个窗口的特征与标签
- 列名可随窗口大小自动适配,无需手动修改列名规则
- 若需要处理超大数据集提升性能,可以将循环逻辑替换为
shift偏移批量生成列再截取有效行,逻辑和上述循环完全一致。
内容的提问来源于stack exchange,提问作者Kathan Vyas
相关产品推荐
相关产品推荐

