因此,在下面的屏幕截图中,我们有3个不同的能量站点,ID01,ID18和ID31。它们是虚拟变量类型的格式,出于可视化目的,我想创建一个名为“Sites”的列,我可以使用它。你会看到我很快就做到了这个循环,但它似乎超级低效。有关如何以最快的方式实现这一目标的任何指示?
答案 0 :(得分:4)
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