Python 在DF中取消虚拟变量的最有效方法
在下面的截图中,我们有3个不同的能源站点,ID01、ID18和ID31。它们是一种虚拟变量类型的格式,出于可视化目的,我只想创建一个名为“Sites”的列,我可以使用它。你会看到我很快就做了一个循环,但它似乎效率非常低。关于如何以最快的方式实现这一点,有什么建议吗 设置Python 在DF中取消虚拟变量的最有效方法,python,pandas,dataframe,Python,Pandas,Dataframe,在下面的截图中,我们有3个不同的能源站点,ID01、ID18和ID31。它们是一种虚拟变量类型的格式,出于可视化目的,我只想创建一个名为“Sites”的列,我可以使用它。你会看到我很快就做了一个循环,但它似乎效率非常低。关于如何以最快的方式实现这一点,有什么建议吗 设置 dot带字符串和对象的产品。 如果这些是真正的虚拟值0或1 def undummy(d): return d.dot(d.columns) data.assign(Site=data.filter(regex='^I
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
安装程序
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
如果你想最大限度地获得答案,最好是共享基于文本的数据集。。。我们无法在不重新创建图像的情况下处理图像中的数据,这太麻烦了。idxmax成功了,谢谢。如果您想最大限度地获得答案,最好共享基于文本的数据集。。。我们无法在不重新创建图像的情况下处理图像中的数据,这太麻烦了。idxmax工作正常,谢谢。感谢您花时间作出如此彻底的响应!不客气!很高兴为您提供帮助。@justinzin如果答案有帮助,请确保对其进行投票。如果答案解决了您的问题,请将其标记为已接受,以便我们可以将线程标记为已解决。在大数据帧上,使用该选项比使用
点
(我用100000行数据帧对两种方法进行计时,dot
平均耗时约0.016秒,np。其中
平均耗时约0.00681秒)感谢您花时间做出如此彻底的响应!欢迎您!很高兴能提供帮助。@Justinzin如果答案有帮助,请不要确保对其进行投票,如果它解决了您的问题,请将其标记为已接受,以便我们可以将线程标记为已解决。在大数据帧上,它的使用速度比dot
(我用100000行数据帧对两种方法进行计时,dot
平均耗时约0.016秒,np。其中
平均耗时约0.00681秒)