将多个虚拟变量转换为一列

时间:2019-12-04 20:39:45

标签: python pandas

我想转换一个看起来像这样的表:

            Blue    Green    Red
Thing 1     No      Yes      No
Thing 2     Yes     No       No
Thing 3     Yes     No       No

变成这种风格:

            Color
Thing 1     Green
Thing 2     Blue
Thing 3     Blue

是否有很好的方法在python或pandas中做到这一点?这些表格样式有名称吗?

3 个答案:

答案 0 :(得分:5)

如果每一行都只有一个“是”,则可以

df.eq('Yes') @ df.columns

输出:

Thing 1    Green
Thing 2     Blue
Thing 3     Blue
dtype: object

答案 1 :(得分:5)

只需使用idxmax

df.eq('Yes').idxmax(axis=1)

输出

Thing 1    Green
Thing 2     Blue
Thing 3     Blue
dtype: object

答案 2 :(得分:1)

使用:

df.where(df.eq('Yes')).stack().reset_index(level=1)['level_1']

Thing 1    Green
Thing 2     Blue
Thing 3     Blue
Name: level_1, dtype: object