Panda: come utilizzare groupby con diff


Puoi utilizzare la seguente sintassi di base per utilizzare la funzione groupby() con la funzione diff() nei panda:

 df = df. sort_values (by=[' group_var1 ', ' group_var2 '])

df[' diff '] = df. groupby ([' group_var1 '])[' values_var ']. diff (). fillna ( 0 )

Questo particolare esempio ordina le righe del DataFrame in base a due variabili specifiche, quindi le raggruppa per group_var1 e calcola la differenza tra le righe nella colonna value_var .

Nota che fillna(0) dice ai panda di inserire uno zero ogni volta che il valore della variabile di gruppo cambia tra righe consecutive nel DataFrame.

L’esempio seguente mostra come utilizzare questa sintassi nella pratica.

Esempio: come utilizzare groupby con diff in Pandas

Supponiamo di avere il seguente DataFrame panda che contiene le vendite totali effettuate da due negozi diversi in date diverse:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' store ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   ' date ': pd. to_datetime (['2022-01-01', '2022-01-02',
                                           '2022-01-03', '2022-01-04',
                                           '2022-01-01', '2022-01-02',
                                           '2022-01-03', '2022-01-04']),
                   ' sales ': [12, 15, 24, 24, 14, 19, 12, 38]})

#view DataFrame
print (df)

  blind date sales
0 A 2022-01-01 12
1 A 2022-01-02 15
2 A 2022-01-03 24
3 A 2022-01-04 24
4 B 2022-01-01 14
5 B 2022-01-02 19
6 B 2022-01-03 12
7 B 2022-01-04 38

Ora diciamo di voler creare una nuova colonna chiamata sales_diff che contenga la differenza nei valori di vendita tra date consecutive, raggruppate per negozio.

Possiamo usare la seguente sintassi per fare questo:

 #sort DataFrame by store and date
df = df. sort_values (by=[' store ', ' date '])

#create new column that contains difference between sales grouped by store
df[' sales_diff '] = df. groupby ([' store '])[' sales ']. diff (). fillna ( 0 )

#view update DataFrame
print (df)

  store date sales sales_diff
0 A 2022-01-01 12 0.0
1 A 2022-01-02 15 3.0
2 A 2022-01-03 24 9.0
3 A 2022-01-04 24 0.0
4 B 2022-01-01 14 0.0
5 B 2022-01-02 19 5.0
6 B 2022-01-03 12 -7.0
7 B 2022-01-04 38 26.0

La nuova colonna sales_diff contiene la differenza nei valori di vendita tra date consecutive, raggruppate per negozio.

Ad esempio, possiamo vedere:

  • La differenza nelle vendite del negozio A tra il 1/1/2022 e il 2/1/2022 è 3 .
  • La differenza nelle vendite del negozio A tra il 02/01/2022 e il 03/01/2022 è 9 .
  • La differenza nelle vendite del negozio A tra il 3/1/2022 e il 4/1/2022 è 0 .

E così via.

Risorse addizionali

I seguenti tutorial spiegano come eseguire altre operazioni comuni nei panda:

Come eseguire una somma GroupBy in Pandas
Come utilizzare Groupby e Plot in Pandas
Come contare valori univoci utilizzando GroupBy in Pandas

Aggiungi un commento

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