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)