因此,在下面的屏幕截图中,我们有 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 - Pandas DF 中取消虚拟变量的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50332270/