#python #pandas #pandas-groupby
#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 означает, что все в порядке). Как только метка становится «плохой», устройство становится постоянно неисправным, и мне не нужно учитывать следующие измерения для этого идентификатора.
Итак, я хочу построить набор данных классификации как:
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:
Вот один из способов сделать это.
Создайте новый вспомогательный столбец, col
используя groupby.cumcount
, и вспомогательную серию label
меток max для каждого ‘Device_ID’. Затем используйте DataFrame.pivot
и назначьте свой вспомогательный ряд:
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
Комментарии:
1. большое спасибо. как я мог не выбирать значения временных рядов, которые появляются после выбора метки max? т. е. 33 не должно присутствовать во временном ряду с идентификатором устройства = 2.