Los documentos muestran cómo aplicar múltiples funciones en un objeto groupby a la vez usando un dict con los nombres de las columnas de salida como las 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 groupby de la Serie. Y cuando un dict se pasa de manera similar a un grupo por DataFrame, espera que las claves sean los nombres de columna a los que se aplicará la función.
Lo que quiero hacer es aplicar múltiples funciones a varias columnas (pero ciertas columnas se operarán varias veces). Además, algunas funciones dependerán de otras columnas en el objeto groupby (como las funciones 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 iterar a través de un objeto groupby). Tendré que cambiarlo para que repita todo el objeto groupby en una sola ejecución, pero me pregunto si hay una forma integrada en los 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 deben ser una columna si agg
se llama desde un DataFrame).
¿Hay alguna forma integrada de hacer lo que me gustaría hacer, o existe la posibilidad de que se agregue esta funcionalidad, o solo tendré que recorrer el grupo manualmente?
Gracias