Saltar al contenido

Cambio de nombre de los nombres de las columnas en la función Pandas Groupby

Es fundamental comprender el código correctamente previamente a utilizarlo a tu proyecto y si ttienes algo que aportar puedes compartirlo con nosotros.

Solución:

Para la primera pregunta, creo que la respuesta sería:

.rename(columns='count':'Total_Numbers')

o

.columns = ['ID', 'Region', 'Total_Numbers']

En cuanto a la segunda, diría que la respuesta sería no. Es posible usarlo como ‘df.ID’ debido al modelo de datos de Python:

Las referencias de atributos se traducen a búsquedas en este diccionario, por ejemplo, mx es equivalente a m.dictar[“x”]

El método actual (a partir de la versión 0.20) para cambiar los nombres de columna después de una operación groupby es encadenar el rename método. Consulte esta nota de desaprobación en la documentación para obtener más detalles.

Respuesta obsoleta a partir de pandas versión 0.20

Este es el primer resultado en Google y, aunque la respuesta principal funciona, en realidad no responde a la pregunta. Hay una mejor respuesta aquí y una larga discusión en github sobre la funcionalidad completa de pasar diccionarios al agg método.

Lamentablemente, estas respuestas no existen en la documentación, pero el formato general para agrupar, agregar y luego cambiar el nombre de las columnas utiliza un diccionario de diccionarios. Él keys al diccionario externo hay nombres de columnas que se van a agregar. Los diccionarios internos tienen keys que la nueva columna nombra con valores como la función de agregación.

Antes de llegar allí, creemos un DataFrame de cuatro columnas.

df = pd.DataFrame('A' : list('wwwwxxxx'), 
                   'B':list('yyzzyyzz'), 
                   'C':np.random.rand(8), 
                   'D':np.random.rand(8))

   A  B         C         D
0  w  y  0.643784  0.828486
1  w  y  0.308682  0.994078
2  w  z  0.518000  0.725663
3  w  z  0.486656  0.259547
4  x  y  0.089913  0.238452
5  x  y  0.688177  0.753107
6  x  z  0.955035  0.462677
7  x  z  0.892066  0.368850

Digamos que queremos agrupar por columnas A, B y columna agregada C con mean y median y columna agregada D con max. El siguiente código haría esto.

df.groupby(['A', 'B']).agg('C':['mean', 'median'], 'D':'max')

            D         C          
          max      mean    median
A B                              
w y  0.994078  0.476233  0.476233
  z  0.725663  0.502328  0.502328
x y  0.753107  0.389045  0.389045
  z  0.462677  0.923551  0.923551

Esto devuelve un DataFrame con un índice jerárquico. La pregunta original se refería a cambiar el nombre de las columnas en el mismo paso. Esto es posible usando un diccionario de diccionarios:

df.groupby(['A', 'B']).agg('C':'C_mean': 'mean', 'C_median': 'median', 
                            'D':'D_max': 'max')

            D         C          
        D_max    C_mean  C_median
A B                              
w y  0.994078  0.476233  0.476233
  z  0.725663  0.502328  0.502328
x y  0.753107  0.389045  0.389045
  z  0.462677  0.923551  0.923551

Esto cambia el nombre de las columnas de una sola vez, pero aún deja el índice jerárquico con el que se puede eliminar el nivel superior df.columns = df.columns.droplevel(0).

Comentarios y valoraciones del post

Si piensas que ha resultado provechoso este post, te agradeceríamos que lo compartas con otros desarrolladores así nos ayudas a dar difusión a nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *