groupby - Python Pandas: mĂșltiples agregaciones de la misma columna
pandas groupby count (2)
Dado el siguiente ejemplo de marco de datos (totalmente excesivo)
df = pandas.DataFrame({
"date":[datetime.date(2012,x,1) for x in range(1,11)],
"returns":0.05*np.random.randn(10),
"dummy":np.repeat(1,10)
})
¿Existe una forma integrada existente para aplicar dos funciones de agregación diferentes a la misma columna, sin tener que llamar a agg
varias veces?
La manera sintácticamente incorrecta, pero intuitivamente correcta, de hacerlo sería:
# Assume `function1` and `function2` are defined for aggregating.
df.groupby("dummy").agg({"returns":function1, "returns":function2})
Obviamente, Python no permite claves duplicadas. ¿Hay alguna otra forma de expresar la entrada a agg
? Tal vez una lista de tuplas [(column, function)]
funcionaría mejor, para permitir múltiples funciones aplicadas a la misma columna? Pero parece que solo acepta un diccionario.
¿Existe una solución para esto además de definir una función auxiliar que solo aplique ambas funciones dentro de ella? (¿Cómo funcionaría esto con la agregación de todos modos?)
Algo como esto funcionaría:
In [7]: df.groupby(''dummy'').returns.agg({''func1'' : lambda x: x.sum(), ''func2'' : lambda x: x.prod()})
Out[7]:
func2 func1
dummy
1 -4.263768e-16 -0.188565
Simplemente puede pasar las funciones como una lista:
In [20]: df.groupby("dummy").agg({"returns": [np.mean, np.sum]})
Out[20]:
returns
sum mean
dummy
1 0.285833 0.028583
o como un diccionario:
In [21]: df.groupby(''dummy'').agg({''returns'':
{''Mean'': np.mean, ''Sum'': np.sum}})
Out[21]:
returns
Sum Mean
dummy
1 0.285833 0.028583