Как горячим способом закодировать список значений на основе строк в python? - PullRequest
0 голосов
/ 27 марта 2020

Чтобы объяснить, что я хочу сделать, я приведу пример.

Сначала мои данные такие.

Данные1)

Столбец A: 0, 1, 2 (всего 3 класса)

Столбец B: 0, 1, 2 (всего 3 класса)

A B
1 1
0 0
2 1 

Затем я сделал одно горячее кодирование для столбцов A и B. После одного горячего кодирования мои данные выглядят так:

Data2)

Index col1 col2 col3 col4 col5 col6  
  0    0    1    0    0    1    0
  1    1    0    0    1    0    0
  2    0    0    1    1    0    0

Допустим, у меня есть так много данных, как данные2. Затем я хочу сделать одно горячее кодирование данных dataframe2. В этом случае значения индекса 0, 1, 2 отличаются друг от друга в data2. Поэтому, если я сделаю одну горячую кодировку для data2, тогда мой результат должен быть

Data3)

Index col1 col2 col3  
  0    1    0    0  
  1    0    1    0 
  2    0    0    1  

, как это.

Как я могу сделать это в python ? Другими словами, я хочу сделать одну горячую кодировку для каждого элемента в dataframe

1 Ответ

0 голосов
/ 27 марта 2020

Если вы хотите закодировать различные возможные последовательности строк, вы можете сделать:

import pandas as pd
df=pd.DataFrame({'A':[1,0,2],'B':[1,0,1]})
In [40]: df
Out[40]:
   A  B
0  1  1
1  0  0
2  2  1    

A_oh = pd.get_dummies(df.A,prefix='A')
B_oh = pd.get_dummies(df.B,prefix='B')
df_oh = pd.concat([A_oh,B_oh],axis=1)
In [41]: df_oh
Out[41]:
   A_0  A_1  A_2  B_0  B_1
0    0    1    0    0    1
1    1    0    0    1    0
2    0    0    1    0    1

df_concat = df_oh.apply(lambda r:str(''.join(str(r[col]) for col in df_oh.columns)),axis=1)    
df_concat
Out[37]:
0    01001
1    10010
2    00101
dtype: object

pd.get_dummies(df_concat)
Out[39]:
   00101  01001  10010
0      0      1      0
1      0      0      1
2      1      0      0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...