Группируйте значения строк в виде столбцов в Pandas

#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.