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

如何将one hot编码列还原为数据集原始分类特征形态

独热编码还原操作方案

固定规则独热列组(team2_offensive_derived_var_0 ~ team2_offensive_derived_var_10)还原

该组列是标准的全类别独热编码,每行仅一个位置取1,直接按列匹配逻辑还原即可,操作步骤如下:

  • 新增row_id列,直接取数据集的行索引作为行序号存储
  • 逐行扫描该组11个列,定位取值为1的列名,从列名末尾拆分出对应的var编号
  • 将提取到的编号存入team2_offensive_derived列,完成后可删除原11个独热列减少冗余
    对应pandas实现代码:
# 筛选该组所有独热列
offensive_oh_cols = [c for c in df.columns if c.startswith("team2_offensive_derived_var_")]
# 生成行ID
df["row_id"] = df.index
# 匹配值为1的列,提取var编号
df["team2_offensive_derived"] = (
    df[offensive_oh_cols]
    .idxmax(axis=1)
    .str.split("_").str[-1]
    .astype(int)
)
# 可选:删除原始独热列
df = df.drop(columns=offensive_oh_cols)

浮点型ratio列组(team2_other_ratio_var_42 ~ team2_other_ratio_var_52)判断与还原

这组列是否为独热编码不能仅靠列名判断,先做两步校验即可明确属性:

  1. 校验单格取值:标准独热编码的单格取值只能是0或1,哪怕存储为浮点型,也只会出现0.0、1.0两个值
  2. 校验逐行求和结果:全量类别独热的每行在该组列的取值和固定为1;如果是丢弃了参考类的哑变量编码,行和为0(对应参考类)或1(对应其他类别)
    对应校验代码:
ratio_cols = [c for c in df.columns if c.startswith("team2_other_ratio_var_")]
# 统计非0/1的取值数量
non_binary_count = df[ratio_cols].apply(lambda x: ~x.isin([0.0, 1.0])).sum().sum()
# 统计行和的分布
row_sum_stats = df[ratio_cols].sum(axis=1).value_counts()

根据校验结果分支处理:

  • 如果non_binary_count大于0,说明列中存在0、1以外的浮点值,这组列不是独热编码,本身就是连续型比率特征,直接按数值列做缺失值填充即可,不需要做编码还原
  • 如果non_binary_count等于0,且所有行和都在[0,1]区间内,说明这组列是用浮点型存储的独热编码,还原逻辑和第一组列完全一致,逐行取最大值对应列的编号作为原始分类值即可
  • 如果校验发现行和存在大于1的情况,说明这组列是多热编码(对应单样本同时归属多个类别),不能转成单列分类值,需要按多标签特征规则处理

提示:做缺失值填充时,还原后的分类列优先用众数填充,数值型比率列可根据分布选择均值、中位数或模型预测填充,适配后续statsmodels的分析要求。

内容的提问来源于stack exchange,提问作者Peter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:39:37