2015-07-06 3 views
2

Я ищу для использования функции pandas get_dummy() для кодирования (довольно обширного) набора категориальных переменных. Однако данные в настоящее время находятся в формате вложенных таблиц. Это означает, что каждая строка представляет собой еще одну переменную экземпляра, напримерPandas Get_dummies для вложенных таблиц

Instance, Cat_Col 
1, John 
1, Smith 
2, Jane 
3, Joe 

Теперь я могу создать полный список уникальных переменных, которые можно использовать для get_dummies, которые представляют все возможные значения. Однако преобразование вложенной таблицы в одну строку экземпляра в этом новом формате дает мне некоторые проблемы.

Любая помощь очень ценится Спасибо

Edit: каждый экземпляр должен иметь манекен кодирования результат для всех значений Cat_col

Идея будет результат будет один вектор признаков, как так

Instance,Col_John,Col_Smith,Col_Jane,Col_Joe 
1,1,1,0,0 
2,0,0,1,0 
3,0,0,0,1 

Я считаю, что это правильное кодирование, при условии, что мы делаем 1-горячее кодирование

+0

Вам нужен манекен для каждого уникального «Instance» или «Cat_Col» или некоторой комбинации обоих? Как выглядел бы фиктивный результат для вашего примера? – Stefan

+0

@StefanJansen вопрос был обновлен – user1874538

ответ

2

Для достижения вашей цели вы можете использовать pivot_table.

import pandas as pd 

df 

Out[10]: 
    Instance Cat_Col 
0   1 John 
1   1 Smith 
2   2 Jane 
3   3  Joe 

df['count'] = 1 
df.pivot('Instance', 'Cat_Col', 'count').fillna(0) 

Out[11]: 
Cat_Col Jane Joe John Smith 
Instance        
1    0  0  1  1 
2    1  0  0  0 
3    0  1  0  0 

Если вы предпочитаете использовать get_dummies,

result = pd.get_dummies(df.Cat_Col) 
result['Instance'] = df.Instance 
result = result.set_index('Instance') 
result.groupby(level=0).apply(max) 

Out[26]: 
      Jane Joe John Smith 
Instance        
1    0  0  1  1 
2    1  0  0  0 
3    0  1  0  0 
+0

Это выглядит хорошо, мое единственное беспокойство в том, что это просто переформатирование таблицы и не дает гибкости для кодирования новых записей, как и pandas get_dummies (см. Ссылку) http: //stackoverflow.com/questions/28465633/easy-way-to-apply-transformation-from-pandas-get-dummies-to-new-data – user1874538

+0

@ user1874538 Я обновил код, чтобы использовать 'get_dummies'. Взгляни. :-) –

+0

Совершенствуйте это именно то, что я искал, большое использование max, так как все равно 1. (в качестве бокового узла приведенный выше пример поворота не работает, если Cat_col не уникален) – user1874538

Смежные вопросы