我有一个数据集,可以记录设备的温度:
Device_ID Temperature Label
1 50 0
1 40 0
2 34 0
1 78 0
2 66 1
3 88 0
1 12 0
2 33 0
3 91 0
设备可以随时发送温度。上面的数据集已经按时间排序。
我想做什么?
根据设备的温度模式对其进行分类。
我已经有了数据集的标签,标签指示测量后设备是否损坏(1表示在此测量之后设备已损坏,0表示设备还可以)。标签变为“不良”后,设备现在将永久性损坏,因此我无需考虑对该ID进行以下测量。
因此,我想将分类数据集构建为:
Device_ID T1 T2 T3 T4 ... Tn Label
1 50 40 78 ... 0
2 34 66 ..... 1 (33 measurement now does not matter)
所以,我的问题是如何将行中的这些时间序列值转换为Pandas中的列?如何高效地完成此任务?
我可以使用Pivot,但是Pivot仅适用于分类变量。
非常感谢您的帮助。
答案 0 :(得分:1)
这是一种方法。
为每个“ Device_ID”使用groupby.cumcount
和最大标签的辅助系列col
创建一个新的辅助列label
。然后使用DataFrame.pivot
和assign您的助手系列:
df['col'] = 'T' + (df.groupby('Device_ID').Temperature.cumcount() + 1).astype(str)
labels = df.groupby('Device_ID')['Label'].max()
df_new = df.pivot(index='Device_ID', columns='col', values='Temperature').assign(Label=labels)
print(df_new)
col T1 T2 T3 T4 Label
Device_ID
1 50.0 40.0 78.0 12.0 0
2 34.0 66.0 33.0 NaN 1
3 88.0 91.0 NaN NaN 0