Cómo obtener el agregado de Pandas grupo por y suma
-
Suma acumulada con
groupby
-
pivot()
para reordenar los datos en una bonita tabla -
Aplicar
function
agroupby
en pandas -
agg()
para obtener la suma agregada de la columna

Demostraremos conseguir el agregado de Pandas groupby
y sum
. También veremos la funcionalidad pivot
para organizar los datos en una bonita tabla y cómo podemos definir nuestra función personalizada y aplicarla en el DataFrame
. También obtendremos la suma agregada usando agg()
.
Suma acumulada con groupby
Podemos obtener la suma acumulada usando el método groupby
. Considere el siguiente Dataframe con la fecha, el nombre de la fruta y la venta en esa fecha:
import pandas as pd
df = pd.DataFrame({'Date': ['08/09/2018', '10/09/2018', '08/09/2018', '10/09/2018'],
'Fruit': ['Apple', 'Apple', 'Banana', 'Banana',],
'Sale': [34, 12, 22, 27]})
Si queremos calcular la suma acumulativa de Venta por Fruta y por cada fecha, podemos hacerlo:
import pandas as pd
df = pd.DataFrame({'Date': ['08/09/2018', '10/09/2018', '08/09/2018', '10/09/2018'],
'Fruit': ['Apple', 'Apple', 'Banana', 'Banana',],
'Sale': [34, 12, 22, 27]})
print (df.groupby(by=['Fruit','Date']).sum().groupby(level=[0]).cumsum())
Producción:
Fruit Date Sale
Apple 08/09/2018 34
10/09/2018 46
Banana 08/09/2018 22
10/09/2018 49
pivot()
para reordenar los datos en una bonita tabla
El método pivot()
podría establecer el atributo de fila y columna de la tabla. Cambiemos el código anterior y apliquemos el método pivot()
para reordenar los datos en una bonita tabla:
import pandas as pd
df = pd.DataFrame({'Date': ['08/09/2018', '10/09/2018', '08/09/2018', '10/09/2018'],
'Fruit': ['Apple', 'Apple', 'Banana', 'Banana',],
'Sale': [34, 12, 22, 27]})
print (df.groupby(['Fruit','Date'],as_index = False).sum().pivot('Fruit','Date').fillna(0))
Producción:
Sale
Date 08/09/2018 10/09/2018
Fruit
Apple 34 12
Banana 22 27
Aplicar function
a groupby
en pandas
Crearemos un método simple para obtener el recuento de los valores en series
o array 1d
y usaremos groupby
para obtener el recuento agregado de cada valor:
from pandas import *
d = {"series": Series(['1','2','1','1','4','4','5'])}
df = DataFrame(d)
def get_count(values):
return len(values)
grouped_count = df.groupby("series").series.agg(get_count)
print(grouped_count)
Después de ejecutar el código obtendremos la siguiente salida que proporciona la ocurrencia de cada valor en serie.
Producción:
series
1 3
2 1
4 2
5 1
Name: series, dtype: int64
agg()
para obtener la suma agregada de la columna
Podemos usar agg()
para aplicar la operación de suma en la columna. Considere el siguiente código:
import pandas as pd
df = pd.DataFrame({'Date': ['08/09/2018', '10/09/2018', '08/09/2018', '10/09/2018'],
'Fruit': ['Apple', 'Apple', 'Banana', 'Banana',],
'Sale': [34, 12, 22, 27]})
print(df.groupby(['Fruit'])['Sale'].agg('sum'))
Producción:
Fruit
Apple 46
Banana 49
Name: Sale, dtype: int64