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

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *