我一个热编码了一些变量,经过一些计算,我想检索原始的一个。
我正在做的是:
我过滤一个热编码的列名(它们都以原始变量的名称开头,比如'mycol'
)
filter_col = [col for col in df if col.startswith('mycol')]
然后我可以简单地将列名乘以筛选的变量。
X_test[filter_col]*filter_col
然而,这会导致稀疏矩阵。如何从中创建单个变量?求和不起作用,因为空位被当作数字,这样做:
sum(X_test[filter_col]*filter_col)
我得到TypeError: unsupported operand type(s) for +: 'int' and 'str'
对如何进行有什么建议吗?这是最好的方法吗?还是有一些函数在做我需要的事情?
根据要求,这里有一个例子,取自here:
df= pd.DataFrame({
'mycol':np.random.choice( ['panda','python','shark'], 10),
})
df=pd.get_dummies(df)
最佳答案
IIUC,你可以使用DataFrame.idxmax
和axis=1
。如有必要,您可以用str.replace
替换伪前缀:
X_test[filter_col].idxmax(axis=1).str.replace('mycol_', '')