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 ๐Ÿ‘‹