Wie vergleiche ich Spalten in verschiedenen Datenrahmen?

23

Ich möchte eine Spalte eines DF mit anderen DFs vergleichen. Die Spalten sind Namen und Nachnamen. Ich möchte überprüfen, ob sich eine Person in einem Datenrahmen in einem anderen befindet.

a_a_a
quelle
Könnten Sie bitte angeben, wie das Ergebnis aussehen soll? Ist es ein df mit Namen, die in beiden dfs erscheinen, und ob Sie noch etwas anderes wie count oder eine passende Spalte in df2 usw. Benötigen? Vielen Dank!
The Lyrist
Sie können die beiden Datenrahmen in den gewünschten Spalten miteinander verbinden und prüfen, ob die Anzahl der Zeilen im Ergebnis positiv ist.
DSAXTON
Zu Ihrer Information: Der Vergleich von Vor- und Nachnamen bei einer anständigen Anzahl von Namen führt zu Schmerzen - viele Menschen haben denselben Namen!
Ken Syme

Antworten:

22

Wenn Sie in einer bestimmten Spalte Gleichheitswerte überprüfen möchten, sagen wir mal Name, können Sie beide Datenrahmen zu einem neuen zusammenführen:

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

Ich denke, das ist effizienter und schneller als wherewenn Sie einen großen Datenbestand haben

Tarek
quelle
1
Ich denke, wir möchten hier eine innere Verbindung verwenden und dann ihre Form überprüfen.
DSAXTON
10
df1.where(df1.values==df2.values).notna()

TrueEinträge zeigen gemeinsame Elemente. Dies zeigt auch die Position der gemeinsamen Elemente im Gegensatz zur Lösung mit merge.

pcko1
quelle
Was ist df.in deiner Antwort? Es gibt nur df1und df2aber keinedf
LearneR
3

Vergleichen von Werten in zwei verschiedenen Spalten

Mit set erhalten Sie eindeutige Werte in jeder Spalte. Der Schnittpunkt dieser beiden Mengen liefert die eindeutigen Werte in beiden Spalten.

Beispiel:

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']))

Ausgabe: {2, 5}


Spaltennamen zweier Datenrahmen vergleichen

Wenn Sie versuchen, die Spaltennamen von zwei Datenrahmen zu vergleichen:

Wenn df1und df2sind die beiden Datenrahmen: set(df1.columns).intersection(set(df2.columns))

Dies liefert die eindeutigen Spaltennamen, die in beiden Datenrahmen enthalten sind.

Beispiel:

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))

Ausgabe: {'c2', 'c3'}

Aathiraks
quelle
Ich denke, bei der Frage geht es darum, die Werte in zwei verschiedenen Spalten in verschiedenen Datenrahmen zu vergleichen, da die fragende Person prüfen möchte, ob sich eine Person in einem Datenrahmen in einem anderen befindet.
Divyanshu Shekhar
Danke, ich habe die Frage falsch verstanden. Ich habe die Antwort jetzt aktualisiert.
Aathiraks
1

Sie können die genaue Anzahl der gemeinsamen und unterschiedlichen Positionen zwischen zwei df überprüfen, indem Sie isin und value_counts () verwenden.

So wie das:

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

Ergebnis:

Beispiel isin

Wahr = gemeinsam Falsch = unterschiedlich

Kuba S
quelle
0

Beachten Sie, dass die Spalten der Datenrahmen Datenreihen sind. Wenn Sie also zwei Spalten als Pandas-Reihe verwenden, können Sie sie genau wie numpy-Arrays vergleichen.

Timur
quelle