Cómo obtener el agregado de Pandas grupo por y suma

Asad Riaz 25 junio 2020
  1. Suma acumulada con groupby
  2. pivot() para reordenar los datos en una bonita tabla
  3. Aplicar function a groupby en pandas
  4. agg() para obtener la suma agregada de la columna
Cómo obtener el agregado de Pandas grupo por y suma

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

Artículo relacionado - Pandas DataFrame