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.

Transformar el dataframe de pandas según la imagen a continuación.

Por favor, ayúdame a entender cuál será la mejor manera de realizar la transformación del DataFrame de pandas en la imagen que se muestra a continuación.

dct = {'section': {0: 1, 1: 1, 2: 1, 3: 1, 4: 2, 5: 2, 6: 3, 7: 3, 8: 3},
       'friendly': {0: 5, 1: 5, 2: 5, 3: 4, 4: 3, 5: 1, 6: 2, 7: 5, 8: 5}}
df = pd.DataFrame(dct)

5: Excelente
4: Muy Bueno
3: Bueno
2: Regular
1: Malo

ENTRADA:

Imagen

SALIDA:

Imagen

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    La transformación requerida aquí se conoce como “despivotar” o “derretir” el dataframe. En un dataframe despivotado, cada valor distinto en el dataframe original se representa como una sola fila. Podemos lograr esta transformación utilizando la función melt de pandas.

    La función melt toma los siguientes parámetros:
    id_vars: una lista de columnas para usar como variables identificadoras. Estas columnas no se despivotarán.
    value_vars: una lista de columnas para despivotar. Si no se especifica, se despivotarán todas las columnas que no estén en id_vars.
    var_name: el nombre de la nueva columna para representar los nombres de columna despivotados.
    value_name: el nombre de la nueva columna para representar los valores despivotados.

    En este caso específico, queremos despivotar la columna friendly mientras mantenemos la columna section como identificador. Entonces podemos usar el siguiente código para lograr la transformación:

    unpivoted_df = df.melt(id_vars=['section'], value_vars=['friendly'], var_name='rating', value_name='score')
    

    Esto resultará en el siguiente dataframe:

       section    rating  score
    0        1  friendly      5
    1        1  friendly      5
    2        1  friendly      5
    3        1  friendly      4
    4        2  friendly      3
    5        2  friendly      1
    6        3  friendly      2
    7        3  friendly      5
    8        3  friendly      5
    

    Luego podemos usar una función map para reemplazar los valores numéricos de puntuación con sus etiquetas correspondientes:

    score_map = {1: 'Pobre', 2: 'Regular', 3: 'Bueno', 4: 'Muy Bueno', 5: 'Excelente'}
    unpivoted_df['score'] = unpivoted_df['score'].map(score_map)
    

    Esto resultará en el dataframe final:

       section    rating      score
    0        1  friendly  Excelente
    1        1  friendly  Excelente
    2        1  friendly  Excelente
    3        1  friendly      Bueno
    4        2  friendly      Bueno
    5        2  friendly      Pobre
    6        3  friendly    Regular
    7        3  friendly  Excelente
    8        3  friendly  Excelente
    

    Que es el resultado deseado.

Comments are closed.