2016-11-16 4 views
1

У меня естьпанды get_dummies с одинаковыми/одинаковыми именами столбцов

In [122]: d=pandas.DataFrame({'d_1':['a','x'],'d_2':['x','y']}) 

In [123]: d 
Out[123]: 
    d_1 d_2 
0 a x 
1 x y 

Я хочу:

a x y 
0 1 1 0 
1 0 1 1 

Я не хочу использовать

In [139]: pandas.get_dummies(d) 
Out[139]: 
    d_1_a d_1_x d_2_x d_2_y 
0 1.0 0.0 1.0 0.0 
1 0.0 1.0 0.0 1.0 

Поскольку d_1_x и d_2_x считаются различными по этой функции, что требует слишком большого объема памяти для моего приложения.

Я все же хочу использовать get_dummies, потому что это быстро; Итак, я попытался переименовать столбцы и применить get_dummies

In [124]: d.columns=['d' for el in d.columns] 

In [141]: d 
Out[141]: 
    d d 
0 a x 
1 x y 

In [151]: pandas.get_dummies(d) 
Out[151]: 
    d_('d',) d_('d',) 
0  1.0  1.0 
1  1.0  1.0 

ответ

1

Вы можете попробовать что-то вроде этого:

import pandas as pd 
d.apply(lambda x: pd.Series(1, x), 1).fillna(0) 

#  a x y 
#0 1.0 1.0 0.0 
#1 0.0 1.0 1.0 
+0

Спасибо! Просто для пояснения это будет 'd.apply (lambda x: pd.Series (1, index = x), axis = 1) .fillna (0)'? – user86895

+0

Правда. Я оставил имя параметра для простоты, но должно быть лучше явно указать имя параметра. – Psidom

+1

Что вы хотите, чтобы результат был в этом случае? Если вы хотите, чтобы результат был подсчетом 'x, y и т. Д. ', Вы можете сделать' d.apply (lambda x: x.value_counts(), 1) .fillna (0) '. – Psidom

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