Panda: come trovare la differenza tra due linee


È possibile utilizzare la funzione DataFrame.diff() per trovare la differenza tra due righe in un DataFrame panda.

Questa funzione utilizza la seguente sintassi:

DataFrame.diff(periodi=1, asse=0)

Oro:

  • periodi: il numero di righe precedenti per calcolare la differenza.
  • asse: trova la differenza sulle righe (0) o sulle colonne (1).

I seguenti esempi mostrano come utilizzare questa funzione nella pratica.

Esempio 1: trova la differenza tra ogni riga precedente

Supponiamo di avere i seguenti panda DataFrame:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' period ': [1, 2, 3, 4, 5, 6, 7, 8],
                   ' sales ': [12, 14, 15, 15, 18, 20, 19, 24],
                   ' returns ': [2, 2, 3, 3, 5, 4, 4, 6]})

#view DataFrame
df

	period sales returns
0 1 12 2
1 2 14 2
2 3 15 3
3 4 15 3
4 5 18 5
5 6 20 4
6 7 19 4
7 8 24 6

Il codice seguente mostra come trovare la differenza tra ciascuna riga corrente di un DataFrame e la riga precedente:

 #add new column to represent sales differences between each row
df[' sales_diff '] = df[' sales ']. diff ()

#view DataFrame
df

        period sales returns sales_diff
0 1 12 2 NaN
1 2 14 2 2.0
2 3 15 3 1.0
3 4 15 3 0.0
4 5 18 5 3.0
5 6 20 4 2.0
6 7 19 4 -1.0
7 8 24 6 5.0

Nota che possiamo anche trovare la differenza tra diverse righe precedenti. Ad esempio, il codice seguente mostra come trovare la differenza tra ciascuna riga corrente e la riga apparsa tre righe prima:

 #add new column to represent sales differences between current row and 3 rows earlier
df[' sales_diff '] = df[' sales ']. diff (periods= 3 )

#view DataFrame
df

        period sales returns sales_diff
0 1 12 2 NaN
1 2 14 2 NaN
2 3 15 3 NaN
3 4 15 3 3.0
4 5 18 5 4.0
5 6 20 4 5.0
6 7 19 4 4.0
7 8 24 6 6.0

Esempio 2: trova la differenza in base alla condizione

Possiamo anche filtrare DataFrame per visualizzare le righe in cui la differenza tra la riga corrente e la riga precedente è inferiore o superiore a un determinato valore.

Ad esempio, il codice seguente restituisce solo le righe in cui il valore della riga corrente è inferiore al valore della riga precedente:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' period ': [1, 2, 3, 4, 5, 6, 7, 8],
                   ' sales ': [12, 14, 15, 13, 18, 20, 19, 24],
                   ' returns ': [2, 2, 3, 3, 5, 4, 4, 6]})

#find difference between each current row and the previous row
df[' sales_diff '] = df[' sales ']. diff ()

#filter for rows where difference is less than zero
df = df[df[' sales_diff ']< 0 ]

#view DataFrame
df

        period sales returns sales_diff
3 4 13 3 -2.0
6 7 19 4 -1.0

Risorse addizionali

Come trovare valori univoci in più colonne in Pandas
Come filtrare un Pandas DataFrame in base ai valori delle colonne
Come selezionare le righe per indice in un Pandas DataFrame

Aggiungi un commento

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