2017-07-28 5 views
0

Ich füge eine Spalte von DataFrame (df1) mit einem anderen DataFrame (df2, wo beide den gleichen Index haben. Das Ergebnis dieser Operation gibt mir viel mehr Zeilen, mit denen ich angefangen habe (Duplikate). gibt es eine Möglichkeit um Duplikate zu vermeiden? Bitte beachten Sie den Beispiel-Codes unter meinem Problem zu replizieren.Pandas Dataframe mit "to_frame" ohne Duplikate verschmelzen

df1 = pd.DataFrame([[1, 1.0, 2.3,0.2,0.53], [2, 3.35, 2.0,0.2,0.65], [2,3.4, 
        2.0,0.25,0.55]], 
        columns=["Sample_ID", "NaX", "NaU","OC","EC"])\ 
        .set_index('Sample_ID') 

df2 = pd.DataFrame([[1,0.2, 1.5, 82], [2, 3.35,2.4,92],[2, 3.4, 2.0,0.25]], 
       columns=["Sample_ID", "OC","Flow", "Diameter"])\ 
       .set_index('Sample_ID') 

df1 = pd.merge(df1,df2['Flow'].to_frame(), left_index=True,right_index=True) 

Mein Ergebnis (unten) hat zwei Einträge für Probe „2“ mit 3.35 beginnen und dann zwei Einträge für "2" beginnend mit 3.40.

Was ich erwartet hatte, war nur zwei Einträge für "2", eine beginnend mit 3,35 und die andere Zeile für "2" beginnend mit 3,40 Die Gesamtzahl der Zeilen sollte nur drei sein, während ich jetzt insgesamt fünf Datenzeilen habe.

Können Sie bitte sehen, was der Grund dafür ist? Danke für Ihre Hilfe!

 NaX NaU OC EC Flow 
Sample_ID     
    1 1.00 2.3 0.20 0.53 1.5 
    2 3.35 2.0 0.20 0.65 2.4 
    2 3.35 2.0 0.20 0.65 2.0 
    2 3.40 2.0 0.25 0.55 2.4 
    2 3.40 2.0 0.25 0.55 2.0 

Antwort

1

Was Sie tun möchten, ist verketten wie folgt:

pd.concat([df1, df2['Flow'].to_frame()], axis=1) 

... das gewünschte Ergebnis liefert. Mit dem Argument axis=1 können Sie zusätzliche Spalten "ankleben".

Warum Ihre Verknüpfung doppelt so viele Einträge für Sample_ID = 2 zurückgibt, können Sie read through the docs auf Joins. Der relevante Teil ist:

In SQL/Standard-relationale Algebra, wenn eine Tastenkombination mehr als einmal in beiden Tabellen erscheint, wird die resultierende Tabelle das kartesische Produkt der zugeordneten Daten haben.

+0

Danke, das hat funktioniert. –