多标签数据的反向热编码。我想将20+ 1个热编码列转换为具有标签名称的列。数据也是多标签的,在标签列中,我希望提到所有的标签。
从这个:
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)。这将返回df中包含最大值的列的值。在只有一个热编码列的情况下,它将返回标签。
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)