Saltar al contenido

definir aggfunc para cada columna de valores en la tabla dinámica de pandas

Agradeceríamos tu ayuda para difundir nuestras reseñas con relación a las ciencias de la computación.

Solución:

Puede aplicar una función específica a una columna específica pasando un dict.

pd.pivot_table(df, values=['D','E'], rows=['B'], aggfunc='D':np.sum, 'E':np.mean)

Puede concatenar dos marcos de datos:

>>> df1 = pd.pivot_table(df, values=['D'], rows=['B'], aggfunc=np.sum)
>>> df2 = pd.pivot_table(df, values=['E'], rows=['B'], aggfunc=np.mean)
>>> pd.concat((df1, df2), axis=1)
          D         E
B                    
A  1.810847 -0.524178
B  2.762190 -0.443031
C  0.867519  0.078460

o tu puedes pasar lista de funciones como aggfunc parámetro y luego reindexar:

>>> df3 = pd.pivot_table(df, values=['D','E'], rows=['B'], aggfunc=[np.sum, np.mean])
>>> df3
        sum                mean          
          D         E         D         E
B                                        
A  1.810847 -4.193425  0.226356 -0.524178
B  2.762190 -3.544245  0.345274 -0.443031
C  0.867519  0.627677  0.108440  0.078460
>>> df3 = df3.ix[:, [('sum', 'D'), ('mean','E')]]
>>> df3.columns = ['D', 'E']
>>> df3
          D         E
B                    
A  1.810847 -0.524178
B  2.762190 -0.443031
C  0.867519  0.078460

Aunque, sería bueno tener una opción para definir aggfunc para cada columna individualmente. No sé cómo se podría hacer, se puede pasar a aggfunc parámetro similar a dict, como 'D':np.mean, 'E':np.sum.

actualizar En realidad, en tu caso puedes pivotar a mano:

>>> df.groupby('B').aggregate('D':np.sum, 'E':np.mean)
          E         D
B                    
A -0.524178  1.810847
B -0.443031  2.762190
C  0.078460  0.867519

Tienes la posibilidad dar difusión a esta crónica si te valió la pena.

¡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 *