2016-07-01 6 views
2

Ich habe zwei Datenrahmen, beide haben die gleiche Anzahl von Spalten und enthalten Textdaten. Das Problem ist, dass die Daten in dem zweiten Datenrahmen Details fehlen:Setze den Wert einer Zeile in einem Pandas-Dataframe gleich dem einer Zeile in einem anderen Datenrahmen

A  B 
1 Bob Hoskins 
2 Laura Hogan 
3 Tom Jones 

    A  B 
1 Bob  x 
2 Bob  x 
3 Bob  x 
4 Laura x 
5 Laura x 
6 Tom  x 

Was ist der schnellste Weg in Pandas den Wert der ‚B‘ Spalte in dem zweiten Datenrahmen in Höhe ihres jeweiligen bedingten Wert setzen in der zuerst? Also wird in jeder Reihe, in der "A" = "Bob" steht, "B" auf Hoskins, Laura auf Hogan und so weiter gesetzt? Der zweite Datenrahmen ist ebenfalls ziemlich groß, mit 100.000 Zeilen, so dass eine schnelle Lösung bevorzugt wird.

+0

Sind der Wert s eigentlich 'x' und werden als fehlend interpretiert? – piRSquared

+0

Das war nur eine Platzhalterzeichenfolge, die ich für das Beispiel verwende, nehme an, dass es auf 'x' gesetzt ist. – GreenGodot

Antwort

3

Durchführen einer linken join auf der zweiten df:

output = df2.merge(df1, how = "left", on = "A") 

* gewünschte df: *

 A  B 
0 Bob Hoskins 
1 Bob Hoskins 
2 Bob Hoskins 
3 Laura Hogan 
4 Laura Hogan 
5 Tom Jones 
+0

@GreenGodot lassen Sie mich wissen, ob das nicht für Sie funktioniert. –

+0

Hallo, ein Problem mit diesem Ansatz besteht darin, dass ich dem Dataframe-Schema seitdem ein oder zwei zusätzliche Spalten hinzugefügt habe. Dies sind nur drei nicht verwandte Spalten, die für beide entsprechenden Zeilen in beiden Datenfeldern die gleichen Werte haben. Wenn ich deinen Code ausführe, bekomme ich diese Spalten doppelt (mit _x und __ an ihren Namen angehängt). Gibt es eine Möglichkeit, dies zu vermeiden, ohne den Datenrahmen danach zu beschneiden? – GreenGodot

2

Sie A als Index für den ersten Datenrahmen festgelegt und dann Filterreihen basierend auf dem Index:

df.set_index('A').loc[df1.A].reset_index() 

#  A   B 
# 0 Bob Hoskins 
# 1 Bob Hoskins 
# 2 Bob Hoskins 
# 3 Laura  Hogan 
# 4 Laura  Hogan 
# 5 Tom  Jones 
Verwandte Themen