标签二进制化器:多列

时间:2018-01-01 15:45:10

标签: python python-3.x pandas scikit-learn

我目前正在尝试转换下面的数据框:

0                Cat             Chicken
1                Fish            Chicken
2                Fish            Cat
3                Cat             Chicken
4                Dog             Cat

                Cat    Fish   Dog    Chicken
0                1      0      0      1     
1                0      1      0      1
2                1      1      0      0
3                1      0      0      1
4                1      0      1      0

到目前为止,我只能成功地完成了奇异列的Label Binarizer。我可以想象以蛮力的方式这样做,我循环通过一切并有条不紊地检查。但是,这会导致运行时间很长。因此,有更聪明的方法吗?

2 个答案:

答案 0 :(得分:3)

df.apply(','.join,1).str.get_dummies(sep=',')
Out[51]: 
   Cat  Chicken  Dog  Fish
0    1        1    0     0
1    0        1    0     1
2    1        0    0     1
3    1        1    0     0
4    1        0    1     0

答案 1 :(得分:2)

将带有前缀和前缀分隔符的get_dummies用作空字符串,即

pd.get_dummies(df,prefix='',prefix_sep='').groupby(level=0, axis=1).max() # Thanks @ coldspeed

     Cat  Chicken  Dog  Fish
0    1        1    0     0
1    0        1    0     1
2    1        0    0     1
3    1        1    0     0
4    1        0    1     0