Aplicar múltiples funciones a múltiples columnas grupales.
losdocs muestra cómo aplicar múltiples funciones en un objeto groupby a la vez utilizando un dict con los nombres de las columnas de salida como teclas:
In [563]: grouped['D'].agg({'result1' : np.sum,
.....: 'result2' : np.mean})
.....:
Out[563]:
result2 result1
A
bar -0.579846 -1.739537
foo -0.280588 -1.402938
Sin embargo, esto solo funciona en un objeto Group by Series. Y cuando un dict se pasa de manera similar a un grupo por DataFrame, se espera que las claves sean los nombres de columna a los que se aplicará la función.
Lo que quiero hacer es aplicar varias funciones a varias columnas (pero ciertas columnas se operarán varias veces). También,Algunas funciones dependerán de otras columnas en el objeto groupby. (como funciones de sumif). Mi solución actual es ir columna por columna y hacer algo como el código anterior, usando lambdas para funciones que dependen de otras filas. Pero esto lleva mucho tiempo (creo que toma mucho tiempo recorrer un objeto groupby). Tendré que cambiarlo para que recorra todo el grupo por objeto en una sola ejecución, pero me pregunto si hay una forma integrada en pandas para hacer esto de manera limpia.
Por ejemplo, he intentado algo como
grouped.agg({'C_sum' : lambda x: x['C'].sum(),
'C_std': lambda x: x['C'].std(),
'D_sum' : lambda x: x['D'].sum()},
'D_sumifC3': lambda x: x['D'][x['C'] == 3].sum(), ...)
pero como se esperaba, obtengo un KeyError (ya que las claves tienen que ser una columna siagg
se llama desde un DataFrame).
¿Hay alguna forma integrada de hacer lo que me gustaría hacer, o la posibilidad de que se pueda agregar esta funcionalidad, o simplemente tendré que recorrer el grupo manualmente?
Gracias