我正在研究蘑菇特征的数据集,几乎所有特征都用 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 不适用于我的目的。我知道每个类别可能还需要相同的属性索引,但这对我不起作用,因为“气味”和“帽子颜色”肯定没有相同的属性选项。
您可以在
_
上拆分列名称,然后使用 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