我可以为独热编码特征添加多层索引吗?

0 投票
1 回答
44 浏览
提问于 2025-04-12 22:41

我正在处理一个关于蘑菇特征的数据集,几乎所有的特征我都用pandas转成了二进制格式,但有一些是用名义编码的。我在想,能不能把原来的列作为第二个索引,这样看起来会像这样:

帽子形状:

Bell   Conical  Flat
1      0        0

而不是:

Cap Shape_Bell    Cap Shape_Conical   Cap Shape_Flat

1                 0                   0

这是我用来进行虚拟编码的代码,供参考。

mode = df['Stalk Root'].mode() #most common amswer is b

df = df.replace('?', 'b') #replace all question marks with most common value

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)

df = pd.get_dummies(df)

df.drop(labels = ['Poisonous_e', 'Bruises_f', 'Gill Size_n', 'Stalk Shape_t', 'Veil Type_p'], axis = 1, inplace = True)
df.rename(columns={'Poisonous_p': 'Poisonous', 'Bruises_t': 'Bruises'}, inplace = True)

我还没尝试太多,因为之前找到的资源对我来说都不太明白。我查过pd.Multilevel.index,但.from_frame这个方法是针对数据框的,没能满足我的需求。我明白可能每个类别需要相同的属性索引,但这对我来说行不通,因为“气味”和“帽子颜色”肯定没有相同的属性选项。

1 个回答

1

你可以把你的列名用 _ 这个符号分开,然后使用 MultiIndex.from_tuples 来创建一个新的多级索引:

df.columns = pd.MultiIndex.from_tuples(col.split('_') for col in df.columns)

输出结果:

  Cap Shape
       Bell Conical Flat
0         1       0    0

撰写回答