Вы можете сделать это следующим образом:
reduced_df=pd.DataFrame({
'some_column': [35, 21, 39, 44, 62, 54, 85, 92, 25, 81],
'color' : ['red', 'green', 'blue', 'black', 'black', 'black', 'black', 'black', 'black', 'black'],
'brand' : ['Chrysler', 'BMW', 'Mercedes', 'Mercedes', 'Mercedes', 'Mercedes', 'Mercedes', 'Mercedes', 'Mercedes', 'Mercedes'],
})
categorical_feature_mask = reduced_df.dtypes==object
categorical_cols = reduced_df.columns[categorical_feature_mask].tolist()
labeled_df = reduced_df[categorical_cols]
enc = OneHotEncoder()
enc.fit(labeled_df)
onehotlabels = enc.transform(labeled_df).toarray()
new_columns=list()
for col, values in zip(labeled_df.columns, enc.categories_):
new_columns.extend([col + '_' + str(value) for value in values])
new_df= pd.concat([reduced_df, pd.DataFrame(onehotlabels, columns=new_columns)], axis='columns')
new_df
Вывод:
Out[44]:
some_column color brand color_black ... color_red brand_BMW brand_Chrysler brand_Mercedes
0 35 red Chrysler 0.0 ... 1.0 0.0 1.0 0.0
1 21 green BMW 0.0 ... 0.0 1.0 0.0 0.0
2 39 blue Mercedes 0.0 ... 0.0 0.0 0.0 1.0
3 44 black Mercedes 1.0 ... 0.0 0.0 0.0 1.0
4 62 black Mercedes 1.0 ... 0.0 0.0 0.0 1.0
5 54 black Mercedes 1.0 ... 0.0 0.0 0.0 1.0
6 85 black Mercedes 1.0 ... 0.0 0.0 0.0 1.0
7 92 black Mercedes 1.0 ... 0.0 0.0 0.0 1.0
8 25 black Mercedes 1.0 ... 0.0 0.0 0.0 1.0
9 81 black Mercedes 1.0 ... 0.0 0.0 0.0 1.0
[10 rows x 10 columns]