python - 在 Pandas DF 中取消虚拟变量的最有效方法
问题描述
所以在下面的截图中,我们有 3 个不同的能量站点,ID01、ID18 和 ID31。它们采用虚拟变量类型的格式,出于可视化目的,我只想创建一个名为“站点”的列,我可以使用它。你会看到我快速创建的循环,但它似乎非常低效。关于如何以最快的方式实现这一目标的任何指示?
解决方案
设置
data = pd.DataFrame([
[1, 0, 0],
[0, 1, 0],
[0, 0, 1],
[1, 0, 0],
[0, 1, 0]
], columns=['ID01', 'ID18', 'ID31']).assign(A=1, B=2)
data
ID01 ID18 ID31 A B
0 1 0 0 1 2
1 0 1 0 1 2
2 0 0 1 1 2
3 1 0 0 1 2
4 0 1 0 1 2
dot
带有字符串和对象的产品。
如果这些是真正的虚拟值0
或1
def undummy(d):
return d.dot(d.columns)
data.assign(Site=data.filter(regex='^ID').pipe(undummy))
ID01 ID18 ID31 A B Site
0 1 0 0 1 2 ID01
1 0 1 0 1 2 ID18
2 0 0 1 1 2 ID31
3 1 0 0 1 2 ID01
4 0 1 0 1 2 ID18
argmax
切片
这可行,但如果数据与所讨论的数据不符,则可能会产生意想不到的结果。
def undummy(d):
return d.columns[d.values.argmax(1)]
data.assign(Site=data.filter(regex='^ID').pipe(undummy))
ID01 ID18 ID31 A B Site
0 1 0 0 1 2 ID01
1 0 1 0 1 2 ID18
2 0 0 1 1 2 ID31
3 1 0 0 1 2 ID01
4 0 1 0 1 2 ID18
推荐阅读
- python - 如何将数据框从列上的特定值一分为二
- python - 迭代索引子集效率
- linux - 第一个 Bash 文件中的错误
- python - (pyqt5) 如何设置 QPrinter.setMargins(self, QPagedPaintDevice.Margins) 的值?
- linux - .Net Core 2.2 验证 jwt 失败,容器上出现 401
- jenkins - 詹金斯管道外壳+管道奇怪的行为
- tensorflow - 我是否需要修改我的 keras 代码才能在 gpu 上高效运行?
- uipath - 如何查找 UiPath Orchestrator 许可证类型和有关机器人并行运行限制的信息?
- user-interface - Flutter如何从子小部件更改父BottomNavigationBar索引
- cakephp - MVC:一种模型,多种应用