将分类数据(在多列中)转换为二进制数据

时间:2015-11-20 19:57:49

标签: python pandas dataframe scikit-learn categorical-data

我有一个分类数据(test_data),如:

s.no    Product_Category_1  Product_Category_2  Product_Category_3
0            3                   NaN                 NaN
1            1                    6                  14
2            12                  NaN                 NaN
3            12                  14                  NaN
4            8                   NaN                 NaN
5            1                    2                  NaN

我想将其转换为二进制数据,如:

s.no    1   2   3   6    8  12   14
0       0   0   1   0    0   0   0
1       1   0   0   1    0   0   1
2       0   0   0   0    0   1   0
3       0   0   0   0    0   1   1
4       0   0   0   0    1   0   0
5       1   1   0   0    0   0   0

我可以理解我必须使用一个热编码。我正在使用python的熊猫。我使用了get_dummies函数,但此函数不适用于整个DataFrame。

1 个答案:

答案 0 :(得分:1)

您可以设置' s.no'作为索引的第一个(如果它还没有)并且取消堆栈以将列放入系列。然后,您可以使用get_dummies并将多索引的级别相加以获得结果:

df = df.set_index('s.no') 
pd.get_dummies(df.unstack()).sum(level=1)

产生:

      1   2   3   6   8   12  14
s.no                            
0      0   0   1   0   0   0   0
1      1   0   0   1   0   0   1
2      0   0   0   0   0   1   0
3      0   0   0   0   0   1   1
4      0   0   0   0   1   0   0
5      1   1   0   0   0   0   0