Panda: controlla se la riga di un dataframe esiste in un altro
È possibile utilizzare la seguente sintassi per aggiungere una nuova colonna a un DataFrame panda che indica se ogni riga esiste in un altro DataFrame:
#merge two DataFrames on specific columns all_df = pd. merge (df1, df2, on=[' column1 ', ' column2 '], how=' left ', indicator=' exists ') #drop unwanted columns all_df = all_df. drop (' column3 ', axis= 1 ) #add column that shows if each row in one DataFrame exists in another all_df[' exists '] = np. where (all_df. exists == ' both ', True , False )
L’esempio seguente mostra come utilizzare questa sintassi nella pratica.
Esempio: controlla se una riga in un Pandas DataFrame esiste in un altro
Supponiamo di avere i seguenti due DataFrames panda:
import pandas as pd #create first DataFrame df1 = pd. DataFrame ({' team ': ['A', 'B', 'C', 'D', 'E'], ' points ': [12, 15, 22, 29, 24]}) print (df1) team points 0 to 12 1 B 15 2 C 22 3 D 29 4 E 24 #create second DataFrame df2 = pd. DataFrame ({' team ': ['A', 'D', 'F', 'G', 'H'], ' points ': [12, 29, 15, 19, 10], ' assists ': [4, 7, 7, 10, 12]}) print (df2) team points assists 0 to 12 4 1 D 29 7 2 F 15 7 3 G 19 10 4:10:12
Possiamo utilizzare la seguente sintassi per aggiungere una colonna chiamata esiste al primo DataFrame che indica se ogni valore nella colonna squadra e punti in ogni riga esiste nel secondo DataFrame:
import numpy as np
#merge two dataFrames and add indicator column
all_df = pd. merge (df1, df2, on=[' team ', ' points '], how=' left ', indicator=' exists ')
#drop assists columns
all_df = all_df. drop (' assists ', axis= 1 )
#add column to show if each row in first DataFrame exists in second
all_df[' exists '] = np. where (all_df. exists == ' both ', True , False )
#view updated DataFrame
print (all_df)
team points exists
0 A 12 True
1 B 15 False
2 C 22 False
3 D 29 True
4 E 24 False
La nuova colonna esiste indica se ogni valore nella colonna squadra e punti in ogni riga esiste nel secondo DataFrame.
Dal risultato possiamo vedere:
- Nel secondo DataFrame esistono un valore di squadra A e un valore di punti pari a 12 .
- Un valore di squadra pari a B e un valore di punti pari a 15 non esistono nel secondo DataFrame.
- Nel secondo DataFrame non esistono un valore di squadra C e un valore di punti pari a 22 .
- Nel secondo DataFrame esistono un valore di squadra D e un valore di punti pari a 29 .
- Nel secondo DataFrame non esistono un valore di squadra E e un valore di punti pari a 24 .
Tieni inoltre presente che puoi specificare valori diversi da True e False nella colonna esistente modificando i valori nella funzione NumPy Where() .
Ad esempio, puoi invece utilizzare “esiste” e “non esiste” come segue:
#add column to show if each row in first DataFrame exists in second
all_df[' exists '] = np. where (all_df. exists == ' both ', ' exists ', ' not exists ')
#view updated DataFrame
print (all_df)
team points exists
0 to 12 exists
1 B 15 not exists
2 C 22 not exists
3 D 29 exists
4 E 24 not exists
Tieni presente che i valori nella colonna esistente sono stati modificati.
Risorse addizionali
I seguenti tutorial spiegano come eseguire altre attività comuni nei panda:
Panda: aggiungi una colonna da un DataFrame a un altro
Panda: ottieni righe che non si trovano in un altro DataFrame
Panda: come verificare se più colonne sono uguali