python - 在熊猫中进行逆多热编码的最快方法是什么?
问题描述
在大型 DataFrame 上进行反向“多热”(例如具有多个同时类别的单热)操作的最快方法是什么?
我有以下数据框:
id type_A type_B type_C
1 1 1 0
2 0 1 0
3 0 1 1
该操作将给出:
id type
1 type_A
1 type_B
2 type_B
3 type_B
3 type_C
解决方案
使用melt
和query
:
df = df.melt(id_vars='id', value_vars=['type_A', 'type_B', 'type_C']).query('value == 1')
id variable value
0 1 type_A 1
3 1 type_B 1
4 2 type_B 1
5 3 type_B 1
8 3 type_C 1
使用正确的列名:
df = (
df.melt(id_vars='id',
value_vars=['type_A', 'type_B', 'type_C'],
var_name='type')
.query('value == 1')
.drop(columns='value')
)
id type
0 1 type_A
3 1 type_B
4 2 type_B
5 3 type_B
8 3 type_C
推荐阅读
- android - 如何检查用户输入的数字是否为整数?
- html - 使用 CSS 背景图像的响应式图像
- angular - 使用 HttpClient 和 file-saver.js 下载文件会获取 JHipster 应用程序加载页面以及请求的下载文件
- c# - 更新字典中的列表
- blockchain - 为什么块没有最终确定
- python - doctest之Python覆盖率测试(unitest)
- android - 如何以用户身份切换 isBackgroundRestricted()?
- google-maps - 如何在地方自动完成服务搜索中获得准确性/信心以进行自动验证?
- reactjs - 如何在代码页 ID 中设置以在谷歌分析中检测?
- java - 如何设置提示文本字符串的颜色、字体和大小?