Преобразование имен столбцов в числа?

1

У меня есть следующая структура данных в pd DataFrame:

    ID  ACT1 ACT2 ACT3 ACT4 ACT5
1   0   0    1    1    1    1
2   1   1    0    0    0    0
3   2   1    1    0    1    0

ACT - это короткий срок для активности здесь, где исходные данные имеют более длинные описания, чем ACTx.

Вопрос. Можно ли было бы преобразовать имена столбцов (кроме ID) в числа и распечатать соответствующий список, чтобы я мог позже увидеть, какой номер представляет какую строку? Смотрите мое последнее сообщение, чтобы понять, откуда оно взялось (сплит или слияние действий по дате)

    ID  0    1    2    3    4
1   0   0    1    1    1    1
2   1   1    0    0    0    0
3   2   1    1    0    1    0

Зачем? Я хочу создать базу данных последовательности и, чтобы сохранить некоторую память для последующих вычислений, мне нравится работать с закодированными ярлыками. В идеале я могу позвонить в таблицу, указав каждую соответствующую кодированную метку и истинную метку.

Coded Label
0     ACT1
1     ACT2
2     ACT3
3     ACT4
4     ACT5
...

Любое хорошее решение в пандах или изучении scikit приветствуется!

Теги:
pandas
label
encode
encoding

2 ответа

1
Лучший ответ

Вы можете сделать это:

Создайте df с закодированными ярлыками:

l = range(0,len(df.columns)-1)
a = list(df[df.columns.difference(['ID'])])
df1 = pd.DataFrame({'Label': a, 'Coded':l})

   Coded Label
0      0  ACT1
1      1  ACT2
2      2  ACT3
3      3  ACT4
4      4  ACT5

Затем переименуйте столбцы:

df = df.rename(columns=dict(zip(df1["Label"], df1["Coded"])))

   ID  0  1  2  3  4
1   0  0  1  1  1  1
2   1  1  0  0  0  0
3   2  1  1  0  1  0

редактировать

Чтобы сохранить порядок столбцов, вы можете сделать это:

a = list(df)
a.remove('ID')
l = range(0,len(df.columns)-1)
df1 = pd.DataFrame({'Label': a, 'Coded':l})
  • 0
    Кажется, он применяет алфавитный порядок при выводе df1. Можно ли это предотвратить, т.е. сохранить порядок столбцов?
  • 1
    @ Кристофер Я обновил ответ
Показать ещё 2 комментария
1
df = pd.DataFrame({'ID':['0','1','2'],'ACT1':['0','1','1'],'ACT2':['1','0','1'],'ACT3':['1','0','0'],'ACT4':['1','0','1'],'ACT5':['1','0','0']})
col = {x:y for x,y in zip(df.columns.difference(['ID']),range(0,len(df.columns)-1))}
label_coded = pd.DataFrame(list(col.items()), columns=['Label', 'Coded'])
df = df.rename(columns=col)

ВХОД:

    ACT1    ACT2    ACT3    ACT4    ACT5    ID
 0     0       1       1       1       1     0
 1     1       0       0       0       0     1
 2     1       1       0       1       0     2

ВЫХОД:

    0   1   2   3   4   ID
0   0   1   1   1   1   0
1   1   0   0   0   0   1
2   1   1   0   1   0   2

label_coded:

Coded Label
0     ACT1
1     ACT2
2     ACT3
3     ACT4
4     ACT5

Ещё вопросы

Сообщество Overcoder
Наверх
Меню