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