-1

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

1 回答 1

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()
于 2021-02-23T15:39:16.533 回答