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

能否为独热编码特征添加多级索引?以蘑菇数据集为例

实现独热编码后的多级列索引(原始特征分组显示)

完全可以实现你想要的效果,核心是把pd.get_dummies生成的下划线分隔列名拆分成多级列索引,让原始特征作为一级索引,子类别作为二级索引。以下是适配你现有代码的修改方案:

修改后的完整代码

import pandas as pd

# 原始数据处理步骤
mode = df['Stalk Root'].mode()  # 最常见值是b
df = df.replace('?', 'b')  # 替换所有问号为众数

df['Ring Number'] = df['Ring Number'].replace({'n': 0, 'o': 1, 't': 2}).astype(int)
df['Gill Spacing'] = df['Gill Spacing'].replace({'c': 0, 'w': 1, 'd': 2}).astype(int)

# 1. 执行独热编码
df = pd.get_dummies(df)

# 2. 将列名拆分为多级索引:(原始特征名, 子类别)
df.columns = pd.MultiIndex.from_tuples(
    tuple(col.split('_', 1)) if '_' in col else (col, '')
    for col in df.columns
)

# 3. 删除冗余列(注意现在用元组指定多级索引列)
df.drop(
    labels=[
        ('Poisonous', 'e'),
        ('Bruises', 'f'),
        ('Gill Size', 'n'),
        ('Stalk Shape', 't'),
        ('Veil Type', 'p')
    ],
    axis=1,
    inplace=True
)

# 4. 重命名指定列的索引(可选,让二分类列的二级索引更简洁)
df = df.rename(columns={
    ('Poisonous', 'p'): ('Poisonous', ''),
    ('Bruises', 't'): ('Bruises', '')
})

关键步骤解释

  1. 拆分列名生成多级索引
    用pd.MultiIndex.from_tuples遍历所有列名:

    • 对带下划线的列(如Cap Shape_Bell),按第一个下划线拆分为('Cap Shape', 'Bell')
    • 对手动编码的无下划线列(如Ring Number),生成('Ring Number', '')来保持多级结构统一
  2. 适配多级索引的列操作
    删除或重命名列时,必须用元组指定完整的多级索引路径,比如要删Poisonous_e,现在要写成('Poisonous', 'e')

  3. 优化二分类列显示(可选)
    对于你保留的二分类列(如Poisonous_p),可以把二级索引设为空字符串,这样显示时更简洁,同时保持和其他特征的多级结构一致

最终效果

处理后的DataFrame列会按原始特征分组显示,比如:

Cap Shape        ...  Poisonous
           Bell Conical Flat ...           
0             1       0    0 ...          1
1             0       1    0 ...          0
...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 05:35:09