2016-11-16 89 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