es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo hacer one-hot-encode a una columna df con una lista separada por pipe

Tengo una columna de un DataFrame que contiene listas separadas por tuberías “|” e incluye información innecesaria. Estoy teniendo problemas al codificar en one-hot encoding la lista. Por ejemplo, quiero que:

Estudiante Carrera Historia
111 ACCT (198720)|MGMT (200045)|NDGD (200630)
112 INST (201326)|ACCT (198720)

se codifique de la siguiente manera:

Estudiante ACCT MGMT NDGD INST
111 1 1 1 0
112 1 0 0 1

He intentado:

df['Carrera Historia'].str.join('|').str.get_dummies()

pero parece codificar por caracteres individuales.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para codificar en one-hot los elementos de una lista en una columna del dataframe, se utiliza la función get_dummies() con el separador '|' y la función apply() para aplicarla a cada fila.

    Por ejemplo:

    # dividir la lista por '|', eliminar información innecesaria y codificar en one-hot
    df_encoded = df['Major History'].apply(lambda x: pd.Series(x.split('|')))
    df_encoded = df_encoded.replace(r'\(.*\)', '', regex=True)
    df_encoded = pd.get_dummies(df_encoded, prefix='', prefix_sep='')
    
    # agrupar por ID de estudiante y sumar las columnas
    df_grouped = df_encoded.groupby(df['Student']).sum().reset_index()
    

    Esto resultará en un dataframe con columnas codificadas en one-hot para cada área principal en la columna ‘Major History’, agrupadas por ID de estudiante.

    Ten en cuenta que la expresión regular r'\(.*\)' se utiliza para eliminar cualquier texto entre paréntesis (por ejemplo, el año asociado con la especialidad). Si tienes otra información innecesaria en tus listas, es posible que debas ajustar este patrón.

Comments are closed.