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