• 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.

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, chiamato df.

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