лучшая реализация одного горячего кодирования в python - PullRequest
0 голосов
/ 16 июня 2020

Нам была поставлена ​​некая школьная задача по введению в однократное кодирование. Нам просто нужно создать функцию с именем 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...