2017-04-12 58 views
1

给定一个熊猫DataFrame,如何将一个二元列(其中1表示值存在,0表示它不)转换为单个分类列?熊猫DataFrame:如何将二进制列转换为一个分类列?

另一种方式去思考的,这是如何进行“反向pd.get_dummies()”?

这是一个明确的列转换成几个二进制列的例子:

import pandas as pd 
s = pd.Series(list('ABCDAB')) 
df = pd.get_dummies(s) 
df 
    A B C D 
0 1 0 0 0 
1 0 1 0 0 
2 0 0 1 0 
3 0 0 0 1 
4 1 0 0 0 
5 0 1 0 0 

我想什么来完成被赋予一个数据帧

df1 
    A B C D 
0 1 0 0 0 
1 0 1 0 0 
2 0 0 1 0 
3 0 0 0 1 
4 1 0 0 0 
5 0 1 0 0 

可以做我把它转换成

df1 
    A B C D category 
0 1 0 0 0 A 
1 0 1 0 0 B 
2 0 0 1 0 C 
3 0 0 0 1 D 
4 1 0 0 0 A 
5 0 1 0 0 B 

回答

3

一种方法是使用idxmax找到1S:

In [32]: df["category"] = df.idxmax(axis=1) 

In [33]: df 
Out[33]: 
    A B C D category 
0 1 0 0 0  A 
1 0 1 0 0  B 
2 0 0 1 0  C 
3 0 0 0 1  D 
4 1 0 0 0  A 
5 0 1 0 0  B 
+0

这只有在数据框中的唯一列是这些二进制列时才有效。有没有办法用你的解决方案来指定这个? – ShanZhengYang

+0

有很多方法可以选择熊猫中的列。可以做'DF [some_list_of_columns_you_care_about] .idxmax(轴= 1)',或使用'df.filter',或使用'df.select'与函数,或'df.loc'用掩模,或'DF。具有位置说明的iloc'等。 – DSM