You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

根据列名规则将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:12:00