Python - 单热编码为单列
Python - One-hot-encode to single column
我对 python 几乎 为零 ,但我正在努力学习它。我有一个带有一些假人的 Pandas 数据框。我想将它们转换回单列,但我就是想不出办法。有什么办法吗?
我有这个:
ID var_1 var_2 var_3 var_4
231 1 0 0 0
220 0 1 0 0
303 0 0 1 0
324 0 0 0 1
我要转换成它:
ID var
231 1
220 2
303 3
324 4
假设这些确实是单热编码,沿第一个轴使用 np.argmax
:
pd.DataFrame({'ID' : df['ID'], 'var' : df.iloc[:, 1:].values.argmax(axis=1) + 1})
ID var
0 231 1
1 220 2
2 303 3
3 324 4
但是,如果 "ID" 是索引的一部分,请改用它:
pd.DataFrame({'ID' : df.index, 'var' : df.values.argmax(axis=1)})
尝试新事物wide_to_long
s=pd.wide_to_long(df,['var'],i='ID',j='Var',sep='_')
s[s['var']==1].reset_index().drop('var',1)
Out[593]:
ID Var
0 231 1
1 220 2
2 303 3
3 324 4
我对 python 几乎 为零 ,但我正在努力学习它。我有一个带有一些假人的 Pandas 数据框。我想将它们转换回单列,但我就是想不出办法。有什么办法吗?
我有这个:
ID var_1 var_2 var_3 var_4
231 1 0 0 0
220 0 1 0 0
303 0 0 1 0
324 0 0 0 1
我要转换成它:
ID var
231 1
220 2
303 3
324 4
假设这些确实是单热编码,沿第一个轴使用 np.argmax
:
pd.DataFrame({'ID' : df['ID'], 'var' : df.iloc[:, 1:].values.argmax(axis=1) + 1})
ID var
0 231 1
1 220 2
2 303 3
3 324 4
但是,如果 "ID" 是索引的一部分,请改用它:
pd.DataFrame({'ID' : df.index, 'var' : df.values.argmax(axis=1)})
尝试新事物wide_to_long
s=pd.wide_to_long(df,['var'],i='ID',j='Var',sep='_')
s[s['var']==1].reset_index().drop('var',1)
Out[593]:
ID Var
0 231 1
1 220 2
2 303 3
3 324 4