Нам была поставлена некая школьная задача по введению в однократное кодирование. Нам просто нужно создать функцию с именем onehot_encode
, которая принимает список в качестве параметра. Однако, если есть только два различных значения, тогда отбросьте первый столбец.
Моя функция выглядит так:
def onehot_encode(cat_values):
"""
Return one-hot encoded values from a list of categorical values
Parameters
----------
cat_values : list, str
list of categorical values
Returns
-------
pandas DataFrame :
one-hot encoded values
"""
y = pd.get_dummies(pd.Series(cat_values))
df = pd.DataFrame(y)
if len(y.columns) == 2:
df = df.drop(df.columns[0], axis=1)
return df
else:
return df
Это параметры, которые будут использоваться:
onehot_encode(['m', 'm', 'f', 'f']).astype(int)
onehot_encode(['a', 'a', 'b', 'c', 'a', 'd', 'e'])
Вывод, если параметр равен onehot_encode(['m', 'm', 'f', 'f']).astype(int)
:
m
0 1
1 1
2 0
2 0
Вывод, если параметр onehot_encode(['a', 'a', 'b', 'c', 'a', 'd', 'e'])
:
a b c d e
0 1 0 0 0 0
1 1 0 0 0 0
2 0 1 0 0 0
3 0 0 1 0 0
4 1 0 0 0 0
5 0 0 0 1 0
6 0 0 0 0 1
Это полностью работает. Но есть ли лучший способ реализовать это? Я хочу покончить с утверждениями if-else.