如何从一个热编码列中获取一列中的所有标签?

How to get all labels in a column out of one hot encoded columns?

反转多标签数据的一次热编码。 我想将 20 多个热编码列转换为带有标签名称的列。 数据也是多标签的,在label这一栏,我希望能提到所有的标签。

来自这里:

LabelA  labelB labelC 
  0        0     1
  1        1     0  

收件人:

LabelA  labelB labelC   labels
      0        0     1   ['labelC']
      1        1     0   ['labelA','labelB']

您可以尝试 df.idxmax(axis=1)。 returns 是 df 中列中包含最大值的列的值。在一个热编码列的情况下,它将 return 标签。

import pandas as pd
df = pd.DataFrame({'values':['val5','val2','val3']})
ohe_df = pd.get_dummies(df['values'])

# Select the One Hot Encoding Values
ohe_cols = ['val5','val2','val3']
result = ohe_df[ohe_cols].idxmax(axis=1)
result

此代码会将所有 One Hot Encoded 列标签转换为包含标签列表的单个列。

来自这里:

LabelA  labelB labelC 
  0        0     1
  1        1     0  

收件人:

LabelA  labelB labelC   labels
      0        0     1   ['labelC']
      1        1     0   ['labelA','labelB']

代码:

def get_col_name(row):    
    b = (df.loc[row.name] == 1)
    c = list(b.index[b])
    return c

df['label'] = df.apply(get_col_name, axis=1)