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

时间:2021-02-23 14:50:06

标签: pandas data-analysis data-cleaning one-hot-encoding data-preprocessing

这是一个使用一种热编码转换的数据集,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 黄色

1 个答案:

答案 0 :(得分:1)

这可以使用 .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()