Как горячим образом закодировать матрицу предложений на уровне символов? - PullRequest
3 голосов
/ 02 марта 2020

Имеется фрейм данных:

    0   1   2   3
0   a   c   e   NaN
1   b   d   NaN NaN
2   b   c   NaN NaN
3   a   b   c   d
4   a   b   NaN NaN
5   b   c   NaN NaN
6   a   b   NaN NaN
7   a   b   c   e
8   a   b   c   NaN
9   a   c   e   NaN

Я бы хотел преобразовать его в кодировку с помощью горячих клавиш, как это

    a   c   e   b   d
0   1   1   1   0   0
1   0   0   0   1   1
2   0   1   0   1   0
3   1   1   0   1   1
4   1   0   0   1   0
5   0   1   0   1   0
6   1   0   0   1   0
7   1   1   1   1   0
8   1   1   0   1   0
9   1   1   1   0   0

pd.get_dummies здесь не работает, потому что это на самом деле кодировать каждый столбец независимо. Как я могу получить это? Кстати, порядок столбцов не имеет значения.

Ответы [ 2 ]

4 голосов
/ 02 марта 2020

Попробуйте это:

df.stack().str.get_dummies().max(level=0)

Out[129]:
   a  b  c  d  e
0  1  0  1  0  1
1  0  1  0  1  0
2  0  1  1  0  0
3  1  1  1  1  0
4  1  1  0  0  0
5  0  1  1  0  0
6  1  1  0  0  0
7  1  1  1  0  1
8  1  1  1  0  0
9  1  0  1  0  1
1 голос
/ 02 марта 2020

В одну сторону, используя str.join и str.get_dummies:

one_hot = df1.apply(lambda x: "|".join([i for i in x if pd.notna(i)]), 1).str.get_dummies()
print(one_hot)

Выход:

   a  b  c  d  e
0  1  0  1  0  1
1  0  1  0  1  0
2  0  1  1  0  0
3  1  1  1  1  0
4  1  1  0  0  0
5  0  1  1  0  0
6  1  1  0  0  0
7  1  1  1  0  1
8  1  1  1  0  0
9  1  0  1  0  1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...