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

如何基于指定窗口转置展平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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:45:00