- analiticas
- Posts
- Tabelle pivot con Python e pandas: una guida per iniziare
Tabelle pivot con Python e pandas: una guida per iniziare
Ecco come creare semplici tabelle pivot senza aprire Excel
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 np
Creiamo 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_table
al 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 👋