У меня есть следующая структура данных в 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 приветствуется!
Вы можете сделать это:
Создайте 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})
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