python - 需要帮助创建一个伪虚拟变量,而不是 '1' 使用来自另一列的值
问题描述
我有一个看起来像这样的数据框:
A B C
34 x a
3 y b
23 y a
40 x b
本质上,cols B 和 C 需要成为虚拟变量,具有标题 B_x、B_y、C_a、C_b。该函数几乎与 get_dummies() 在 pandas 中的工作方式完全相同,但有一个主要区别:对于创建的所有虚拟变量,我需要该值是 A 列中的值,其值为 1。类似于
A B_x B_y C_a C_b
34 34 0 34 0
3 0 3 0 3
23 0 23 23 0
40 40 0 0 40
我正在处理具有大量类别的相当大的数据。
我尝试在数据集上使用 get_dummies(),然后使用 df.mask 将所有 1 更改为 df.A,但这非常慢(大约 10 分钟)。
解决方案
使用pd.get_dummies
与广播栏目A
df2 = pd.get_dummies(df[['B', 'C']]) * df.A.values.reshape([-1,1])
B_x B_y C_a C_b
0 34 0 34 0
1 0 3 0 3
2 0 23 23 0
3 40 0 0 40
要分配回来A
,有很多选择。可以做df2['A'] = df['A']
或使用pd.concat
pd.concat([df.A, df2], axis=1)
推荐阅读
- php - 从解码的 json 数组中获取 Resultcode 的值
- docker - 如何在 docker-compose 文件中定义 Traefik 标签?
- html - 使用 css 使 html 注释可见
- c# - 动态表达式 LINQ 选择 - 嵌套集合中的 SelectMany
- android - 如何处理硬件键盘上的“输入”按钮?
- .net - ASP.NET 突然拒绝大文件。缺少设置?
- kubernetes - 如何在 Kubernetes 中“描述”一个 pod 时获取所有状态的历史?
- javascript - jQuery 构建自定义查询字符串格式不正确
- flask - Flask-admin:如何对多对多关系进行内联编辑?
- log4j - log4j:设置日志级别的单个附加程序块对我不起作用