将行值分组为熊猫中的列

时间:2019-03-29 07:50:11

标签: python pandas pandas-groupby

我有一个数据集,可以记录设备的温度:

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仅适用于分类变量。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

这是一种方法。

为每个“ Device_ID”使用groupby.cumcount和最大标签的辅助系列col创建一个新的辅助列label。然后使用DataFrame.pivotassign您的助手系列:

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