【问题标题】:Python - One-hot-encode to single columnPython - One-hot-encode 到单列
【发布时间】:2019-01-05 14:09:22
【问题描述】:

我对 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

【问题讨论】:

    标签: python pandas one-hot-encoding


    【解决方案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
    

    【讨论】:

    • 我喜欢这个答案,但它在这里不起作用。 A 有一个没有分隔符的变量,所以我只是应用了没有 sep 参数的代码。我得到了这个错误:ValueError: Shape of passed values is (2, 2), indices imply (2, 66899)
    • @Rods2292 如果答案不能解决您的问题,那么请以这样一种方式提出您的问题,即解决方案自然需要克服它才能被接受。听起来不错?否则,请公平地测试所有解决方案,然后再决定要解决的问题。
    【解决方案2】:

    假设这些确实是单热编码,请沿第一个轴使用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)})
    

    【讨论】:

      猜你喜欢
      • 2020-10-31
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 2017-10-03
      • 2017-06-07
      • 1970-01-01
      • 2015-10-09
      • 2021-11-16
      相关资源
      最近更新 更多