将多个列转换为熊猫中一列的类别

问题描述

这是一个使用一种热编码转换的数据集,0表示否,1表示是

数据:

ID 红色 蓝色 绿色 黄色 橙色
1001 1 0 1 0 1
1002 0 1 0 1 0
1003 0 0 0 1 1
1004 0 0 0 0 0
1005 1 0 0 1 0

如何在 Pandas 中将上面的一种热编码数据集转换为下面的一种

预期输出

ID 颜色
1001 红色
1001 绿色
1001 橙色
1002 蓝色
1002 黄色
1003 黄色
1003 橙色
1005 红色
1005 黄色

解决方法

这可以使用 .dot

解决
df.set_index('ID',inplace=True)
res = df.dot(df.columns + ',').str.rstrip(',').str.split(',').explode().reset_index(name='Colour')

资源:

    ID  colour
0   1001    Red
1   1001    Green
2   1001    Orange
3   1002    Blue
4   1002    Yellow
5   1003    Yellow
6   1003    Orange
7   1004    
8   1005    Red
9   1005    Yellow

如果您想将元素放在 index 7 处不包含任何内容,请执行

res = res.replace('',np.nan).dropna()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...