Python - возможно ли объединить столбец после использования панд get_dummies? - PullRequest
0 голосов
/ 26 октября 2018

вот мой пример df

         doc_num
doc1 doc2 
 A    B    U123
 A    C    U123
 A    D    U124
 B    C    U126
 B    D    U126

, и я использую

pd.get_dummies(df.doc_num).sort_index(level=0)

, чтобы создать векторную матрицу, подобную этой

           U123 U124 U126
doc1 doc2  
 A    B     1    0    0
 A    C     1    0    0
 A    D     0    1    0
 B    C     0    0    1
 B    D     0    0    1

, но я хотел бысоединить doc1 и doc2, а затем создать новый столбец, чтобы увидеть ожидаемый результат, подобный этому

       U123 U124 U126
doc_3  
 A,B     1    0    0
 A,C     1    0    0
 A,D     0    1    0
 B,C     0    0    1
 B,D     0    0    1

возможно ли это?заранее спасибо

Ответы [ 3 ]

0 голосов
/ 26 октября 2018

В дополнение к ответу @ jezrael вам нужна векторная матрица, поэтому сделайте:

df1=pd.get_dummies(df.doc_num)
df1.insert(0, 'doc_3',  df['doc1'] + ',' + df['doc2'])
print(df1.set_index('doc_3'))

Или:

df1=pd.get_dummies(df.doc_num)
df1['doc_3']=df.pop('doc1') + ',' + df.pop('doc2')
print(df1.set_index('doc_3'))

Весь вывод:

       U123  U124  U126
doc_3                  
A,B       1     0     0
A,C       1     0     0
A,D       0     1     0
B,C       0     0     1
B,D       0     0     1

Теперь вы действительно получаете желаемый результат.

0 голосов
/ 26 октября 2018

Вы можете попробовать код ниже.Он объединит две колонки в одну.Кроме того, добавьте «,» между ними.

df['doc_3'] = df['doc1'] + "," + df['doc2']

Затем вы можете оставить первые два столбца

0 голосов
/ 26 октября 2018

Полагаю, вам нужно присоединиться к обоим уровням MultiIndex, установить имя индекса на rename_axis:

df1 = pd.get_dummies(df.doc_num).sort_index(level=0)
df1.index = df1.index.map(','.join)
df1 = df1.rename_axis('doc_3')
print (df1)
       U123  U124  U126
doc_3                  
A,B       1     0     0
A,C       1     0     0
A,D       0     1     0
B,C       0     0     1
B,D       0     0     1

И добавить reset_index для столбца, если необходимо:

df1 = df1.reset_index()
print (df1)
  doc_3  U123  U124  U126
0   A,B     1     0     0
1   A,C     1     0     0
2   A,D     0     1     0
3   B,C     0     0     1
4   B,D     0     0     1

Или сначала reset_index для столбцов с MultiIndex с pop для извлечения столбцов, если требуется индекс:

df1 = pd.get_dummies(df.doc_num).sort_index(level=0).reset_index()
df1.index =  df1.pop('doc1') + ',' + df1.pop('doc2')
df1 = df1.rename_axis('doc_3')
print (df1)
       U123  U124  U126
doc_3                  
A,B       1     0     0
A,C       1     0     0
A,D       0     1     0
B,C       0     0     1
B,D       0     0     1

Или используйте insert для нового столбца:

df1 = pd.get_dummies(df.doc_num).sort_index(level=0).reset_index()
df1.insert(0, 'doc_3',  df1.pop('doc1') + ',' + df1.pop('doc2'))

print (df1)
  doc_3  U123  U124  U126
0   A,B     1     0     0
1   A,C     1     0     0
2   A,D     0     1     0
3   B,C     0     0     1
4   B,D     0     0     1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...