Ottieni l'aggregato di Pandas Group-By e Sum

Asad Riaz 25 aprile 2021
  1. Somma cumulativa con groupby
  2. pivot() per riorganizzare i dati in una bella tabella
  3. Applica la funzione a groupby in Pandas
  4. agg() per ottenere la somma aggregata della colonna
Ottieni l'aggregato di Pandas Group-By e Sum

Dimostreremo come ottenere l’aggregato in Pandas usando groupby e sum. Esamineremo anche la funzionalità pivot per disporre i dati in una bella tabella e definire la nostra funzione personalizzata ed eseguirla sul DataFrame. Otterremo anche la somma aggregata usando agg().

Somma cumulativa con groupby

Possiamo ottenere la somma cumulativa utilizzando il metodo groupby. Considera il seguente Dataframe con le colonne Date, Fruit e Sale:

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],
    }
)

Se vogliamo calcolare la somma cumulativa di Sale per Fruit e per ogni data, possiamo fare:

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())

Produzione:

Fruit  Date         Sale
Apple  08/09/2018    34
       10/09/2018    46
Banana 08/09/2018    22
       10/09/2018    49

pivot() per riorganizzare i dati in una bella tabella

Il metodo pivot() potrebbe impostare l’attributo di riga e colonna della tabella. Cambiamo il codice sopra e applichiamo il metodo pivot() per riorganizzare i dati in una bella tabella:

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

Produzione:

             Sale           
Date   08/09/2018 10/09/2018
Fruit                       
Apple          34         12
Banana         22         27

Applica la funzione a groupby in Pandas

Creeremo un metodo semplice per ottenere il conteggio dei valori in series o 1d array e utilizzeremo groupby per ottenere il conteggio aggregato di ciascun valore:

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)

Dopo aver eseguito il codice, otterremo il seguente output, che fornisce l’occorrenza di ogni valore nella serie.

Produzione:

series
1    3
2    1
4    2
5    1
Name: series, dtype: int64

agg() per ottenere la somma aggregata della colonna

Possiamo usare agg() per applicare l’operazione di somma sulla colonna. Codici di esempio:

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"))

Produzione:

Fruit
Apple     46
Banana    49
Name: Sale, dtype: int64

Articolo correlato - Pandas DataFrame