Come faccio a confrontare colonne in diversi frame di dati?


23

Vorrei confrontare una colonna di un df con altri df. Le colonne sono nomi e cognomi. Vorrei verificare se una persona in un frame di dati si trova in un altro.


Potresti per favore indicare come vuoi che appaia il risultato? È un df con i nomi che appaiono in entrambi i dfs e se hai bisogno anche di qualcos'altro come count o colonna corrispondente in df2, ecc. Grazie!
The Lyrist,


Potresti unire i due frame di dati interni nelle colonne che ti interessano e verificare se il numero di righe nel risultato è positivo.
Dsaxton,

Cordiali saluti, confrontando il nome e il cognome su qualsiasi set di nomi abbastanza grande finirà con il dolore - molte persone hanno lo stesso nome!
Ken Syme,

Risposte:


22

Se vuoi controllare valori uguali su una determinata colonna diciamo Nome puoi unire entrambi i Dataframe con uno nuovo:

mergedStuff = pd.merge(df1, df2, on=['Name'], how='inner')
mergedStuff.head()

Penso che questo sia più efficiente e più veloce wherese hai un set di big data


1
Penso che vogliamo usare un join interno qui e quindi verificarne la forma.
dsaxton,

10
df1.where(df1.values==df2.values).notna()

Truele voci mostrano elementi comuni. Questo rivela anche la posizione degli elementi comuni, a differenza della soluzione con merge.


cosa c'è df.nella tua risposta? Ci sono solo df1e df2ma nodf
LearneR

3

Confronto di valori in due colonne diverse

Usando set, ottieni valori univoci in ogni colonna. L'intersezione di questi due insiemi fornirà i valori univoci in entrambe le colonne.

Esempio:

df1 = pd.DataFrame({'c1': [1, 4, 7], 'c2': [2, 5, 1], 'c3': [3, 1, 1]}) df2 = pd.DataFrame({'c4': [1, 4, 7], 'c2': [3, 5, 2], 'c3': [3, 7, 5]}) set(df1['c2']).intersection(set(df2['c2']))

Produzione: {2, 5}


Confronto tra i nomi delle colonne di due frame di dati

Nel caso in cui si stia tentando di confrontare i nomi delle colonne di due frame di dati:

Se df1e df2sono i due frame di dati: set(df1.columns).intersection(set(df2.columns))

Ciò fornirà i nomi di colonna univoci contenuti in entrambi i frame di dati.

Esempio:

df1 = pd.DataFrame({'c1': [1, 4, 7], 'c2': [2, 5, 1], 'c3': [3, 1, 1]})
df2 = pd.DataFrame({'c4': [1, 4, 7], 'c2': [3, 5, 2], 'c3': [3, 7, 5]})

set(df1.columns).intersection(set(df2.columns))

Produzione: {'c2', 'c3'}


Penso che la domanda riguardi il confronto dei valori in due colonne diverse in diversi frame di dati, in quanto la persona che desidera verificare se una persona in un frame di dati si trova in un altro.
Divyanshu Shekhar,

Grazie, ho sbagliato la domanda. Ho aggiornato la risposta ora.
aathiraks,

1

Puoi ricontrollare il numero esatto di posizioni comuni e diverse tra due df usando isin e value_counts ()

Come quello:

df['your_column_name'].isin(df2['your_column_name']).value_counts()

Risultato:

esempio isin

Vero = comune Falso = diverso


0

Si noti che le colonne dei frame di dati sono serie di dati. Quindi, se prendi due colonne come serie di panda, puoi confrontarle come faresti con le matrici intorpidite.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.