2016-06-28 10 views
3

Also habe ich zwei Datenrahmen: eine, wo bestimmte Spalten ausgefüllt sind und eine wo andere gefüllt sind, aber einige aus der vorherigen df fehlen. Beide teilen einige gemeinsame nicht leere Spalten.Pandas Funktion um fehlende Werte von anderen Datenrahmen basierend auf Matching-Spalte zu füllen?

DF1: 
FirstName Uid JoinDate BirthDate 
     Bob 1 20160628  NaN 
    Charlie 3 20160627  NaN 

DF2: 
FirstName Uid JoinDate BirthDate 
     Bob 1  NaN 19910524 
    Alice 2  NaN 19950403 

Result: 
FirstName Uid JoinDate BirthDate 
     Bob 1 20160628 19910524 
    Alice 2  NaN 19950403 
    Charlie 3 20160627  NaN 

Unter der Annahme, dass diese Zeilen nicht Indexpositionen in ihren jeweiligen Datenrahmen teilen, ist es eine Möglichkeit, dass ich die fehlenden Werte in DF1 mit Werten von DF2 füllen können, wo die Zeilen auf einer bestimmten Spalte übereinstimmen (in Dieses Beispiel Uid)?

Gibt es auch eine Möglichkeit, einen neuen Eintrag in DF1 von DF2 zu erstellen, wenn für diese Spalte keine Übereinstimmung vorhanden ist (z. B. Uid), ohne Zeilen in DF1 zu entfernen, die nicht mit Zeilen in DF2 übereinstimmen?

BEARBEITEN: Ich aktualisierte die Datenframes, um nicht übereinstimmende Ergebnisse in beiden Datenrahmen hinzuzufügen, die ich im Ergebnis df brauche. Ich habe auch meine letzte Frage aktualisiert, um das zu reflektieren.

Antwort

3

UPDATE: Sie können es tun, die richtigen Indizes setzen und schließlich den Index kam DF Zurücksetzen:

In [14]: df1.set_index('FirstName').combine_first(df2.set_index('FirstName')).reset_index() 
Out[14]: 
    FirstName Uid JoinDate BirthDate 
0  Alice 2.0   NaN 19950403.0 
1  Bob 1.0 20160628.0 19910524.0 
2 Charlie 3.0 20160627.0   NaN 

versuchen Sie dies:

In [113]: df2.combine_first(df1) 
Out[113]: 
    FirstName Uid JoinDate BirthDate 
0  Bob 1 20160628.0 19910524 
1  Alice 2   NaN 19950403 
+1

, dass fast genau das, was ich suche Wenn jedoch eine Zeile in DF1 mit keiner Zeile in DF2 übereinstimmt, werden sie eliminiert. Ich habe meine ursprüngliche Frage aktualisiert, um besser zu reflektieren, wonach ich suche. – rosstripi

+0

@rossbot, ich habe meine Antwort aktualisiert - bitte überprüfen Sie – MaxU

+1

perfekt! Genau das habe ich gesucht! – rosstripi

Verwandte Themen