Come calcolare l'offset per gruppo in panda
È possibile utilizzare i seguenti metodi per calcolare i valori spostati di gruppo in un DataFrame panda:
Metodo 1: calcolare l’offset per un gruppo
df[' lagged_values '] = df. groupby ([' group '])[' values ']. shift ( 1 )
Metodo 2: calcolare l’offset per più gruppi
df[' lagged_values '] = df. groupby ([' group1 ', ' group2 '])[' values ']. shift ( 1 )
Da notare che il valore della funzione shift() indica il numero di valori per i quali calcolare lo spostamento.
Gli esempi seguenti mostrano come utilizzare ciascun metodo nella pratica.
Esempio 1: calcolare l’offset di un gruppo
Supponiamo di avere il seguente DataFrame panda che mostra le vendite effettuate da due negozi in giorni consecutivi:
import pandas as pd #createDataFrame df = pd. DataFrame ({' store ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'], ' sales ': [18, 10, 14, 13, 19, 24, 25, 29]}) #view DataFrame print (df) blind sales 0 to 18 1 to 10 2 to 14 3 to 13 4 B 19 5 B 24 6 B 25 7 B 29
Possiamo utilizzare la seguente sintassi per creare una colonna offset che mostri le vendite del giorno precedente per ciascun negozio:
#add column that displays lag of sales column by store df[' lagged_sales '] = df. groupby ([' store '])[' sales ']. shift ( 1 ) #view updated DataFrame print (df) store sales lagged_sales 0 to 18 NaN 1 to 10 18.0 2 A 14 10.0 3 A 13 14.0 4 B 19 NaN 5 B 24 19.0 6 B 25 24.0 7 B 29 25.0
Ecco come interpretare il risultato:
- Il primo valore nella colonna offset è NaN poiché non esiste alcun valore precedente nella colonna vendite per il negozio A.
- Il secondo valore nella colonna offset è 18 poiché è il valore precedente nella colonna vendite per il negozio A.
E così via.
Esempio 2: calcolare l’offset per più gruppi
Supponiamo di avere il seguente DataFrame panda che mostra le vendite effettuate dai dipendenti di due negozi in giorni consecutivi:
import pandas as pd #createDataFrame df = pd. DataFrame ({' store ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'], ' employee ':['O', 'O', 'R', 'R', 'O', 'O', 'R', 'R'], ' sales ': [18, 10, 14, 13, 19, 24, 25, 29]}) #view DataFrame print (df) store employee sales 0 AO 18 1 AO 10 2 AR 14 3 AR 13 4 BO 19 5 BO 24 6 BR 25 7 BR 29
Possiamo utilizzare la seguente sintassi per creare una colonna di offset che visualizzi le vendite del giorno precedente per ciascun dipendente in ciascun negozio:
#add column that displays lag of sales column by store and employee df[' lagged_sales '] = df. groupby ([' store ',' employee '])[' sales ']. shift ( 1 ) #view updated DataFrame print (df) store employee sales lagged_sales 0 AO 18 NaN 1 AO 10 18.0 2 AR 14 NaN 3 AR 13 14.0 4 BO 19 NaN 5 BO 24 19.0 6 BR 25 NaN 7 BR 29 25.0
La nuova colonna lagged_sales mostra le vendite del giorno precedente per ciascun dipendente in ciascun negozio.
Nota : in questo esempio, abbiamo raggruppato per due colonne, ma puoi raggruppare per tutte le colonne che desideri includendo tutti i nomi di variabili che desideri nella funzione groupby() .
Risorse addizionali
I seguenti tutorial spiegano come eseguire altre attività comuni nei panda:
Come eliminare colonne in Pandas
Come escludere colonne in Pandas
Come applicare una funzione alle colonne selezionate in Pandas
Come modificare l’ordine delle colonne in Pandas DataFrame