如何对多标签数据反向One Hot Encoding,从独热编码列提取标签生成新列
多标签One Hot Encoding反向转换解决方案
我们可以通过Pandas快速实现需求,以下是可直接复用的代码:
首先导入依赖包:
import pandas as pd import numpy as np
小数据量场景(万行级以下)
直接用apply遍历即可,写法简单易读:
# 读取你的数据,示例代码可替换为你的实际数据读取逻辑 df = pd.read_csv("你的数据文件路径.csv") # 配置独热编码列列表 # 方式1:手动指定列名 onehot_cols = ['LabelA', 'labelB', 'labelC'] # 方式2:自动筛选独热列,排除非独热的其他列即可,适合列数多的场景 # onehot_cols = df.columns.difference(['要排除的非独热列名1', '要排除的非独热列名2']) # 生成标签列 df['labels'] = df[onehot_cols].apply( lambda row: [col for col, val in row.items() if val == 1], axis=1 ) # 输出验证 print(df)
大数据量场景(十万行级以上)
用向量化操作优化,执行效率远高于apply遍历:
arr = df[onehot_cols].values mask = arr == 1 df['labels'] = [list(np.array(onehot_cols)[m]) for m in mask]
执行后即可得到你需要的带labels列的目标数据,每条数据的labels列会自动包含所有值为1的标签名称。
内容的提问来源于stack exchange,提问作者ana
相关产品推荐
相关产品推荐

