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

将单索引时间序列DataFrame转换为sktime要求的多索引格式

格式转换实现方案

完全可以完成这种滚动窗口格式转换,以下是具体实现步骤及代码示例:

1. 模拟原始数据(以Time为索引的多变量时间序列)

先构造和你数据结构一致的示例数据:

import pandas as pd
import numpy as np
from sktime.datatypes import convert_to

# 生成示例时间索引与多变量数据
time_index = pd.date_range(start='2023-01-01', periods=5, freq='D')
raw_df = pd.DataFrame(
    {
        'Var1': [1, 2, 3, 4, 5],
        'Var2': [10, 20, 30, 40, 50],
        'Var3': [100, 200, 300, 400, 500]
    },
    index=time_index
)

2. 转换为(instance, time)多索引的滚动窗口格式

提供两种实现方式,可根据需求选择:

方式一:Pandas手动构造滚动窗口

适合需要自定义窗口逻辑的场景:

window_size = 3
# 生成所有窗口的起始时间点
window_starts = raw_df.index[:-window_size+1]

# 遍历每个窗口,生成对应instance的数据
instance_dfs = []
for instance_id, start in enumerate(window_starts):
    end = start + pd.Timedelta(days=window_size-1)
    window_data = raw_df.loc[start:end].reset_index()
    window_data['instance'] = instance_id
    instance_dfs.append(window_data)

# 合并数据并设置多索引
target_df = pd.concat(instance_dfs).set_index(['instance', 'Time']).sort_index()

方式二:使用sktime原生工具

更贴合sktime生态,适合后续直接对接sktime算法的场景:

from sktime.forecasting.model_selection import SlidingWindowSplitter

# 先将单索引数据转为sktime兼容的面板格式
panel_data = convert_to(raw_df, to_type='pd-multiindex')

# 初始化滑动窗口拆分器
splitter = SlidingWindowSplitter(window_length=window_size, fh=0)

# 提取每个窗口数据并构造多索引结构
window_panels = []
for instance_id, (train_idx, _) in enumerate(splitter.split(panel_data)):
    window = panel_data.iloc[train_idx]
    window = window.reset_index(level=0, drop=True)
    window = window.assign(instance=instance_id).set_index('instance', append=True).swaplevel()
    window_panels.append(window)

target_df = pd.concat(window_panels).sort_index()

3. 格式验证

最终生成的target_df将以(instance, time)为双层索引,每个instance对应一个窗口大小为3的时间序列片段,完全符合sktime的输入要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:35:40