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
functionagroupbyen 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