根据列名规则将one-hot编码列还原为原始主列的方法咨询
独热编码列还原为原始分类列实现方案
适用于独热编码列命名规则为原始主列名_类别值、且每行仅存在一个激活的独热列(值为1)的场景。
通用实现(支持批量还原多个主列)
基于Pandas实现,可一次性还原所有符合命名规则的独热列,无需手动指定主列名:
import pandas as pd # 假设df是你已经做完独热编码的DataFrame def reverse_onehot(df): # 提取所有独热列对应的原始主列名(按下划线切割取首段,去重) main_cols = list(set(col.split('_')[0] for col in df.columns if '_' in col)) for main_col in main_cols: # 筛选当前主列对应的所有独热子列 onehot_subcols = [col for col in df.columns if col.startswith(f"{main_col}_")] # 取每行值最大的列名(即激活的独热列),去掉前缀得到原始类别值 df[main_col] = df[onehot_subcols].idxmax(axis=1).str.replace(f"{main_col}_", "") # 可选:删除已经还原完的独热子列 df = df.drop(columns=onehot_subcols) return df # 调用方法 reversed_df = reverse_onehot(df)
单主列简化实现
如果仅需要还原单个主列,比如gender列,可直接用以下代码:
# 筛选gender对应的所有独热列 gender_subcols = [col for col in df.columns if col.startswith("gender_")] # 还原gender列 df["gender"] = df[gender_subcols].idxmax(axis=1).str.replace("gender_", "")
效果说明
假设原独热编码数据存在gender_male、gender_female两列,某行gender_male值为1、gender_female值为0,还原后生成的gender列对应行取值为male,符合需求。
内容的提问来源于stack exchange,提问作者joe8ones
相关产品推荐
相关产品推荐

