Pandas DataFrame:如何将二进制列转换为一个分类列?

Sha*_*ang 4 python binary dataframe pandas dummy-variable

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

另一种思考方式是如何执行“反向 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
Run Code Online (Sandbox Code Playgroud)

我想完成的是给出一个数据框

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
Run Code Online (Sandbox Code Playgroud)

我可以把它转换成

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
Run Code Online (Sandbox Code Playgroud)

DSM*_*DSM 5

一种方法是使用idxmax查找1:

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
Run Code Online (Sandbox Code Playgroud)