#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 обновлен, чтобы отразить это. Можно ли адаптировать ваш ответ?