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.

Creando un índice múltiple a partir de datos agrupados por mes en Pandas

Considere estos datos de muestra:

Mes  Ubicación  Productos  Ventas  Ganancia
ENE      1        43          32     20  
ENE      2        82          54     25
ENE      3        64          43     56
FEB      1        37          28     78
FEB      2        18          15     34
FEB      3        5           2      4
MAR      1        47          40     14

La transformación de índices múltiples que intento lograr es la siguiente:

          ENE                     FEB                     MAR
Ubicación  Productos Ventas Ganancia   Productos Ventas Ganancia   Productos Ventas Ganancia
1         43       32    29       37       28    78       47       40    14
2         82       54    25       18       15    34       null     null  null
3         64       43    56       5        2     4        null     null  null

Intenté versiones de esto:

df.stack().to_frame().T

Puso todos los datos en una sola fila. Por lo tanto, ese no es el objetivo.
Presumo que estoy cerca en que debería ser un apilamiento o desapilamiento, fundición o desfundición, pero mis intentos han resultado en datos incoherentes en este momento. Aprecio su tiempo intentando resolver esto.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para lograr la transformación de múltiples índices deseada, se puede utilizar la función pivot_table de pandas. Aquí está cómo hacerlo:

    # Cargar los datos de ejemplo en un DataFrame de pandas
    import pandas as pd
    
    data = {'Month': ['JAN', 'JAN', 'JAN', 'FEB', 'FEB', 'FEB', 'MAR'],
            'Location': [1, 2, 3, 1, 2, 3, 1],
            'Products': [43, 82, 64, 37, 18, 5, 47],
            'Sales': [32, 54, 43, 28, 15, 2, 40],
            'Profit': [20, 25, 56, 78, 34, 4, 14]}
    
    df = pd.DataFrame(data)
    
    # Utilizar pivot_table para transformar los datos
    df_pivot = pd.pivot_table(df, values=['Products', 'Sales', 'Profit'], 
                              index='Location', columns='Month')
    
    # Mostrar los datos transformados
    print(df_pivot)
    

    Esto debería producir la siguiente salida:

             Products          Sales          Profit         
    Month         FEB   JAN   MAR   FEB JAN MAR    FEB JAN MAR
    Location                                                 
    1              37    43    47    28  32  40     78  20  14
    2              18    82   NaN    15  54 NaN     34  25 NaN
    3               5    64   NaN     2  43 NaN      4  56 NaN
    

    Como se puede ver, la función pivot_table crea un DataFrame de varios índices con la estructura deseada.

Comments are closed.