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