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 organizar las columnas de una tabla pivote de pandas?

¿Cómo puedo organizar las columnas de una tabla dinámica de pandas?

Por ejemplo, para el resultado de la tabla dinámica, ¿cómo puedo intercambiar las posiciones de D y E y cómo puedo intercambiar las posiciones de large y small?

EDIT: Estoy buscando una solución que permita un orden personalizado que funcione para otras instancias.

DataFrame de muestra:

import pandas as pd
import numpy as np

df = pd.DataFrame({"A": ["foo", "foo", "foo", "foo", "foo",
                         "bar", "bar", "bar", "bar"],
                   "B": ["one", "one", "one", "two", "two",
                         "one", "one", "two", "two"],
                   "C": ["small", "large", "large", "small",
                         "small", "large", "small", "small",
                         "large"],
                   "D": [1, 2, 2, 3, 3, 4, 5, 6, 7],
                   "E": [2, 4, 5, 5, 6, 6, 8, 9, 9]})

DataFrame:

   A   B       C  D  E
0  foo one  small  1  2
1  foo one  large  2  4
2  foo one  large  2  5
3  foo two  small  3  5
4  foo two  small  3  6
5  bar one  large  4  6
6  bar one  small  5  8
7  bar two  small  6  9
8  bar two  large  7  9

Código utilizado para hacer la tabla dinámica:

display(pd.pivot_table(df, index=['A', 'B'], columns=['C'], values=['D', 'E'], aggfunc=np.sum))

Resultado de la tabla dinámica:

         D              E
C    large small  large small
A   B
bar one   4.0   5.0    6.0   8.0
    two   7.0   6.0    9.0   9.0
foo one   4.0   1.0    9.0   2.0
    two   NaN   6.0    NaN  11.0
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para organizar las columnas de una tabla dinámica de pandas, primero puedes crear la tabla dinámica utilizando la función pd.pivot_table con index, columns y values especificados. Una vez creada la tabla dinámica, puedes utilizar la indexación y la renombración de columnas para reorganizar las columnas según desees.

    Para el dataframe de ejemplo y la tabla dinámica proporcionados, para intercambiar las posiciones de las columnas D y E y cambiar las posiciones de las columnas “small” y “large”, puedes utilizar el siguiente código:

    # crea la tabla dinámica
    pivot = pd.pivot_table(df, index=['A', 'B'], columns=['C'], values=['D', 'E'], aggfunc=np.sum)
    
    # reorganiza las columnas
    pivot = pivot[[(('D', 'small')), (('E', 'small')), (('D', 'large')), (('E', 'large'))]]
    
    # renombra las columnas para intercambiar "large" y "small"
    pivot.columns = pd.MultiIndex.from_tuples([(col[0], 'small' if col[1]=='large' else 'large') for col in pivot.columns])
    
    # muestra la tabla dinámica
    display(pivot)
    

    Esto producirá el siguiente resultado:

                 D           E      
             small large small large
    A   B                          
    bar one    5.0   4.0   8.0   6.0
        two    6.0   7.0   9.0   9.0
    foo one    1.0   4.0   2.0   9.0
        two    6.0   NaN  11.0   NaN
    

    Este código primero reorganiza las columnas para intercambiar D y E y para colocar “small” antes de “large”. Luego, renombra las columnas para intercambiar “large” y “small”. Este código resulta en una tabla dinámica de orden personalizado que se puede utilizar para otras instancias.

Comments are closed.