Включить больше столбцов с get_dummies () - PullRequest
0 голосов
/ 28 мая 2018

У меня есть следующие списки:

vocab = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
list1 = ['a', 'b', 'c', 'd', 'e']
list2 = ['f', 'g', 'h', 'i', 'j']

Со следующим кодом я хотел бы получить кодировку, которая создает горячее кодирование для списка 1, но включает все элементы из vocab.

import pandas as pd
encoding1 = pd.get_dummies(data= list1, columns= vocab)
encoding2 = pd.get_dummies(data= list2, columns= vocab)

Я хочу вывод:

encoding1 =      a   b   c   d   e   f   g   h   i   j
              1  1   0   0   0   0   0   0   0   0   0
              2  0   1   0   0   0   0   0   0   0   0 
              3  0   0   1   0   0   0   0   0   0   0
              4  0   0   0   1   0   0   0   0   0   0
              5  0   0   0   0   1   0   0   0   0   0

encoding2 =      a   b   c   d   e   f   g   h   i   j
              1  0   0   0   0   0   1   0   0   0   0
              2  0   0   0   0   0   0   1   0   0   0 
              3  0   0   0   0   0   0   0   1   0   0
              4  0   0   0   0   0   0   0   0   1   0
              5  0   0   0   0   0   0   0   0   0   1

Однако я получаю вывод:

encoding1 =      a   b   c   d   e   
              1  1   0   0   0   0  
              2  0   1   0   0   0  
              3  0   0   1   0   0  
              4  0   0   0   1   0   
              5  0   0   0   0   1   

encoding2 =      f   g   h   i   j   
              1  1   0   0   0   0  
              2  0   1   0   0   0  
              3  0   0   1   0   0  
              4  0   0   0   1   0   
              5  0   0   0   0   1  

Что я могу сделать, чтобы получить желаемый вывод?

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

я бы попробовал

vocab_dummies = pd.get_dummies(data= vocab)

encoding1 = vocab_dummies.iloc[0:5,:]
encoding2 = vocab_dummies.iloc[5:vocab_dummies.shape[0],:].reset_index(drop=True)

encoding1
Out[67]: 
   a  b  c  d  e  f  g  h  i  j
0  1  0  0  0  0  0  0  0  0  0
1  0  1  0  0  0  0  0  0  0  0
2  0  0  1  0  0  0  0  0  0  0
3  0  0  0  1  0  0  0  0  0  0
4  0  0  0  0  1  0  0  0  0  0

encoding2
Out[68]: 
   a  b  c  d  e  f  g  h  i  j
0  0  0  0  0  0  1  0  0  0  0
1  0  0  0  0  0  0  1  0  0  0
2  0  0  0  0  0  0  0  1  0  0
3  0  0  0  0  0  0  0  0  1  0
4  0  0  0  0  0  0  0  0  0  1
0 голосов
/ 28 мая 2018

Попробуйте преобразовать макеты в фреймы данных, затем мы назначим столбцы для vocab, затем в новых столбцах появится множество NaN, затем мы используем функцию pandas fillna для фреймов данных и в параметрах, которые мынапишите 0, чтобы преобразовать все NaN в 0:

encoding1 = pd.get_dummies(data= list1)
encoding2 = pd.get_dummies(data= list2)
df1 = pd.DataFrame(encoding1, columns=vocab)
df2 = pd.DataFrame(encoding2, columns=vocab)
print(df1.fillna(0))
print(df2.fillna(0))

Вывод:

df1
   a  b  c  d  e    f    g    h    i    j
0  1  0  0  0  0  0.0  0.0  0.0  0.0  0.0
1  0  1  0  0  0  0.0  0.0  0.0  0.0  0.0
2  0  0  1  0  0  0.0  0.0  0.0  0.0  0.0
3  0  0  0  1  0  0.0  0.0  0.0  0.0  0.0
4  0  0  0  0  1  0.0  0.0  0.0  0.0  0.0
df2
     a    b    c    d    e  f  g  h  i  j
0  0.0  0.0  0.0  0.0  0.0  1  0  0  0  0
1  0.0  0.0  0.0  0.0  0.0  0  1  0  0  0
2  0.0  0.0  0.0  0.0  0.0  0  0  1  0  0
3  0.0  0.0  0.0  0.0  0.0  0  0  0  1  0
4  0.0  0.0  0.0  0.0  0.0  0  0  0  0  1
...