Questa micro-lezione parla un elemento fondamentale nell'analisi dati: le tabelle pivot in pandas. Se ti sei mai chiesto come evitare Excel per creare tabelle pivot, sei nel posto giusto.
Il programma della micro-lezione
Le librerie e il dataframe
Per prima cosa importiamo le librerie necessarie. Nonostante la creazione di tabelle pivot con Python richieda la sola libreria pandas, per poter applicare delle funzioni di aggregazioni abbiamo bisogno anche della libreria numpy. Importiamole entrambe:
import pandas as pd
import numpy as npCreiamo un dataframe (se hai giร un dataframe sul quale stai lavorando, puoi saltare questo passaggio e usare i tuoi dati):
data = {
'segmento': ['Enterprise', 'Enterprise', 'PMI', 'PMI', 'Altro', 'Altro', 'Enterprise', 'PMI'],
'paese': ['Italia', 'Francia', 'Italia', 'Germania', 'Spagna', 'Italia', 'Germania', 'Francia'],
'status': ['Attivo', 'Chiuso', 'Attivo', 'In trattativa', 'Attivo', 'Chiuso', 'In trattativa', 'Attivo'],
'n_account': [3, 2, 5, 4, 2, 1, 3, 4],
'valore_account': [150000, 80000, 75000, 100000, 25000, 15000, 200000, 95000]
}
df = pd.DataFrame(data)Ecco lโaspetto del nostro dataframe:
segmento | paese | status | n_account | valore_account |
|---|---|---|---|---|
Enterprise | Italia | Attivo | 3 | 150000 |
Enterprise | Francia | Chiuso | 2 | 80000 |
PMI | Italia | Attivo | 5 | 75000 |
PMI | Germania | In trattativa | 4 | 100000 |
Altro | Spagna | Attivo | 2 | 25000 |
Altro | Italia | Chiuso | 1 | 15000 |
Enterprise | Germania | In trattativa | 3 | 200000 |
PMI | Francia | Attivo | 4 | 95000 |
La tabella pivot base
La forma piรน semplice di una tabella pivot si ottiene specificando solo l'indice e le colonne da aggregare. Di default, pandas fa la media dei valori di queste colonne:
df_pivot = pd.pivot_table(
df,
index=['segmento'],
values=['n_account','valore_account']
)In questo esempio abbiamo:
creato un nuovo dataframe chiamato
df_pivot. Questo dataframe avrร la forma di una tabella pivot.applicato
pd.pivot_tableal dataframe iniziale, chiamatodf.reso la colonna โsegmentoโ lโindice della tabella pivot.
specificato di voler aggregare i valori delle colonne โn_accountโ e โvalore_accountโ.
Ed ecco come apparirร nostra semplice tabella pivot:
n_account | valore_account | |
|---|---|---|
segmento | ||
Altro | 1.500000 | 20000.000000 |
Enterprise | 2.666667 | 143333.333333 |
PMI | 4.333333 | 90000.000000 |
Attenzione!
Se includerai una colonna con valori non numerici quando specifichi il parametro values, pandas darร un messaggio dโerrore.
Come possiamo vedere, abbiamo la media dei valori delle colonne โn_accountโ e โvalore_accountโ. Lโaggregazione รจ fatta secondo i valori della colonne โsegmentoโ.
Personalizzare le aggregazioni
A volte, come in questo caso, la media non รจ quello che ci serve. Infatti, immaginiamo di voler contare gli account in ogni segmento e avere la somma del loro valore. Per farlo, dobbiamo usare rispettivamente len e np.sum.
Ecco come fare:
df_pivot2 = pd.pivot_table(
df,
index=['segmento'],
aggfunc = {'n_account':len, 'valore_account':np.sum}
)Con il parametro aggfunc possiamo passare un dizionario contenente da una parte il nome di ogni colonna e dallโaltro lโaggregazione da applicare ad essa.
Inoltre, il parametro aggfunc ci permette di sostituire il parametro values. Infatti solo le colonne per le quali abbiamo specificato il tipo di aggregazione faranno parte della tabella pivot.
Ecco la tabella pivot con le aggregazioni len e np.sum:
n_account | valore_account | |
|---|---|---|
segmento | ||
Altro | 2 | 40000 |
Enterprise | 3 | 430000 |
PMI | 3 | 270000 |
Eseguire piรน aggregazioni sulla stessa colonna
Immaginiamo adesso di volere, oltre al numero di account per segmento, anche la somma la media del valore degli account. Quindi:
Conteremo i valori della colonna โn_accountโ
Faremo sia la somma che la media dei valori della colonna โvalore_accountโ
Ecco qui il codice per creare questa tabella pivot:
df_pivot3 = pd.pivot_table(
df,
index=['segmento'],
aggfunc = {'n_account':len, 'valore_account':[np.sum,np.mean]}
)Ed ecco qui la nuova tabella pivot:
n_account | valore_account | ||
|---|---|---|---|
len | mean | sum | |
Segmento | |||
Altro | 2 | 20000.000000 | 40000 |
Enterprise | 3 | 143333.333333 | 430000 |
PMI | 3 | 90000.000000 | 270000 |
Conclusione
In questa micro-lezione abbiamo visto come creare delle semplici tabelle pivot con Python e pandas. Il comando pivot_table รจ un realtร molto piรน complesso e versatile.
Tuttavia, quanto visto in questa micro-lezione รจ sufficiente per moltissime applicazioni, come ad esempio formattare i nostri dati per costruire un grafico a colonne.
Se vuoi esportare questa tabella pivot come file Excel, magari per condividerla con un collega che non usa Python, puoi trovare in questa micro-lezione come fare.
Alla prossima micro-lezione ๐
