这是一个使用一种热编码转换的数据集,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 表示是
数据:
| 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()