multiple groupby examples example columns column agg python aggregate pandas

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