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

6
给定一个pandas 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

我希望能够处理一个数据框。

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
1个回答

14

一种方法是使用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

这只有在数据框中仅包含这些二进制列时才有效。你的解决方案是否有指定的方法? - ShanZhengYang
在pandas中选择列的方法有很多。您可以使用df[some_list_of_columns_you_care_about].idxmax(axis=1),或使用df.filter,或使用带有函数的df.select,或使用具有掩码的df.loc,或使用具有位置指定的df.iloc等方法。 - DSM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接