Ottieni l'aggregato di Pandas Group-By e Sum

  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

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

  • Converti Pandas Dataframe in Numpy Array