【问题标题】:Pandas DataFrame: How to convert binary columns into one categorical column?Pandas DataFrame:如何将二进制列转换为一个分类列?
【发布时间】:2017-09-08 22:29:02
【问题描述】:

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

【问题讨论】:

    标签: python pandas dataframe binary dummy-variable


    【解决方案1】:

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

    【讨论】:

    • 这仅在数据框中的唯一列是这些二进制列时才有效。有没有办法在您的解决方案中指定这一点?
    • 在 pandas 中有很多选择列的方法。您可以使用df[some_list_of_columns_you_care_about].idxmax(axis=1),或使用df.filter,或将df.select 与函数一起使用,或将df.loc 与掩码一起使用,或将df.iloc 与位置说明一起使用,等等。
    猜你喜欢
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 2019-11-28
    • 1970-01-01
    • 2018-04-18
    相关资源
    最近更新 更多