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