pandas sktime格式的 Dataframe 到多索引

kpbwa7wx  于 2023-02-07  发布在  其他
关注(0)|答案(2)|浏览(88)

我有一个多变量时间序列数据,格式如下(pd.dataframe,索引为Time),

我正在尝试使用sktime,它要求数据是多索引格式。在上面,如果我想使用滚动窗口3在上面的数据。它要求它在这个格式。这里pd。Dataframe有多索引(示例,时间)

我在想是否有可能把它转换成新的格式。

xmq68pz9

xmq68pz91#

编辑这里有一个使用行索引的更直接、可能更快的解决方案

df = pd.DataFrame({
    'time':range(5),
    'a':[f'a{i}' for i in range(5)],
    'b':[f'b{i}' for i in range(5)],
})

w = 3
w_starts = range(0,len(df)-(w-1)) #start positions of each window

#iterate through the overlapping windows to create 'instance' col and concat
roll_df = pd.concat(
    df[s:s+w].assign(instance=i) for (i,s) in enumerate(w_starts)
).set_index(['instance','time'])

print(roll_df)

产出

a   b
instance time        
0        0     a0  b0
         1     a1  b1
         2     a2  b2
1        1     a1  b1
         2     a2  b2
         3     a3  b3
2        2     a2  b2
         3     a3  b3
         4     a4  b4
s71maibg

s71maibg2#

下面是一种实现所需结果的方法:

# Create the instance column
instance = np.repeat(range(len(df) - 2), 3)

# Repeat the Time column for each value in A and B
time = np.concatenate([df.Time[i:i+3].values for i in range(len(df) - 2)])

# Repeat the A column for each value in the rolling window
a = np.concatenate([df.A[i:i+3].values for i in range(len(df) - 2)])

# Repeat the B column for each value in the rolling window
b = np.concatenate([df.B[i:i+3].values for i in range(len(df) - 2)])

# Create a new DataFrame with the desired format
new_df = pd.DataFrame({'Instance': instance, 'Time': time, 'A': a, 'B': b})

# Set the MultiIndex on the new DataFrame
new_df.set_index(['Instance', 'Time'], inplace=True)
new_df

相关问题