从2D阵列创建时间序列DF



我有一个类似以下的DF

t1,t2,t3,...,t500, a1,a2,a3,...,a500,Label1
t1,t2,t3,...,t500, b1,b2,b3,...,b500,Label2
t1,t2,t3,...,t500, c1,c2,c3,...,c500,Label3
.
.
.
t1,t2,t3,...,t500, x1,x2,x3,...,x500,LabelX 

所有候选(t1,t2,...tn(的时间数组(/values(相同

如何将此DF转换为时间序列数据?第一步(最简单(是取出第一行的前半部分,这将是时间列(所有候选人都一样(,然后从中间垂直将DF分解为两部分,取值(第二部分(,使其与时间列横向和凹入,交叉。但是,我该如何保存这些标签呢?

我希望输出类似于:

t1,a1,b1,c1,...,x1
t2,a2,b2,c2,...,x2
.
.
.
tn,an,bn,cn,...,xn

但我不知道如何在将每个候选人的时间序列值转换为时间序列数据的同时保留标签。

IIUC按位置选择所有列-在样本数据中,从列位置4到最后一列结束,按第一行rename列(因为每行的值相同(和最后转置:

print (df)
0   1   2     3   4   5   6     7       8
0  t1  t2  t3  t500  a1  a2  a3  a500  Label1
1  t1  t2  t3  t500  b1  b2  b3  b500  Label2
2  t1  t2  t3  t500  c1  c2  c3  c500  Label3
3  t1  t2  t3  t500  x1  x2  x3  x500  LabelX

df = df.set_index([8]).iloc[:, 4:-1].rename(columns=dict(zip(df.columns[4:-1], df.iloc[0]))).T
print (df)
8  Label1 Label2 Label3 LabelX
t1     a1     b1     c1     x1
t2     a2     b2     c2     x2
t3     a3     b3     c3     x3

如果您对标签的位置感到困惑,请意识到LabelX基本上就是x501。它完全符合时间序列的末尾。因此,在您在问题中解释的过程之后,添加一个时间步长t501,并将标签视为任何其他数据点。参见示例

t1,t2,t3,...,t500, a1,a2,a3,...,a500,Label1
t1,t2,t3,...,t500, b1,b2,b3,...,b500,Label2
t1,t2,t3,...,t500, c1,c2,c3,...,c500,Label3
.
.
.
t1,t2,t3,...,t500, x1,x2,x3,...,x500,LabelX 

将成为

t1  ,a1,    b1,    c1,    ...,x1
t2  ,a2,    b2,    c2,    ...,x2
t3  ,a3,    b3,    c3,    ...,x3
.
.
t500,a500,  b500,  c500,  ...,x500
t501,Label1,Label2,Label3,...,LabelX 

最新更新