Как можно использовать pd.get_dummies() для фиктивного кода списка категорий?

#python

#python

Вопрос:

Я понимаю, что pd.get_dummies() это очень хорошо работает для создания фиктивного набора для представления категориальной переменной (в моем случае для алгоритма дерева решений). Мой вопрос в том, как это можно адаптировать для обработки записей, представляющих собой список категорий?

MWE:

 import pandas as pd

a = pd.DataFrame({
   'id': ['i', 'j', 'k', 'l'], 
   'category': [['a', 'b'], 'b', 'c', ['b', 'c']],
   'x': ['p', 'q', 'r', 's'],
   'y': [10, 20, 30, 40]
})

...

a_dummied

  id a  b  c  x  y
0 i  1  1  0  p 10
1 j  0  1  0  q 20
2 k  0  0  1  r 30
3 l  0  1  1  s 40
  

Ответ №1:

Вы можете разбить category столбец, а затем вызвать pd.get_dummies :

 print( pd.get_dummies(a.explode('category').set_index('id'), prefix='', prefix_sep='').groupby(level=0).sum() )
  

С принтами:

     a  b  c
id         
i   1  1  0
j   0  1  0
k   0  0  1
l   0  1  1
  

РЕДАКТИРОВАТЬ: чтобы работать с большим количеством столбцов, сначала создайте столбец pd.get_dummies() on category , а затем .join с исходным фреймом данных:

 c = pd.get_dummies( a[['id', 'category']].explode('category').set_index('id'), prefix='', prefix_sep='').groupby(level=0).sum()
print( a.set_index('id').drop(columns='category').join(c) )
  

С принтами:

     x   y  a  b  c
id                
i   p  10  1  1  0
j   q  20  0  1  0
k   r  30  0  0  1
l   s  40  0  1  1
  

Комментарии:

1. Это работает, но после вопроса я понял, что мой MWE недостаточно конкретен. У меня есть дополнительные столбцы, которые необходимо сохранить. MWE обновлен, чтобы отразить это. Можно ли адаптировать ваш ответ?