from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder(drop='first', sparse=False)
ohe.fit(X_train[['Pclass', 'Sex', 'Embarked']])
map_list = [[f'{k}_{i}' for i in v] for k, v in zip(['Pclass', 'Sex', 'Embarked'],
[[l for l in a][1:] for a in ohe.categories_])]
encoded_labels = [e for f in map_list for e in f]
X_train = pd.concat([X_train.drop(['Pclass', 'Sex', 'Embarked'], axis=1),
pd.DataFrame(ohe.transform(X_train[['Pclass', 'Sex', 'Embarked']]),
columns=encoded_labels, index=X_train.index)], axis=1)