我有一个类似以下的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