2012-04-11 9 views
14

Ich denke, ich bin kein Idiot, aber vielleicht irre ich mich. Kann mir jemand erklären, warum das nicht funktioniert? Mit 'merge' kann ich die gewünschten Ergebnisse erzielen. Aber ich muss schließlich mehrere pandasDataFrames verbinden, so muss ich diese Methode arbeiten.Pandas: einfach 'Join' funktioniert nicht?

In [2]: left = pandas.DataFrame({'ST_NAME': ['Oregon', 'Nebraska'], 'value': [4.685, 2.491]}) 

In [3]: right = pandas.DataFrame({'ST_NAME': ['Oregon', 'Nebraska'], 'value2': [6.218, 0.001]}) 

In [4]: left.join(right, on='ST_NAME', lsuffix='_left', rsuffix='_right') 
Out[4]: 
    ST_NAME_left value ST_NAME_right value2 
0  Oregon 4.685   NaN  NaN 
1  Nebraska 2.491   NaN  NaN 

Antwort

12

Versuchen Sie es mit merge (http://pandas.pydata.org/pandas-docs/stable/merging.html#database-style-dataframe-joining-merging):

In [14]: right 
Out[14]: 
    ST_NAME value2 
0 Oregon 6.218 
1 Nebraska 0.001 

In [15]: merge(left, right) 
Out[15]: 
    ST_NAME value value2 
0 Nebraska 2.491 0.001 
1 Oregon 4.685 6.218 

In [18]: merge(left, right, on='ST_NAME', sort=False) 
Out[18]: 
    ST_NAME value value2 
0 Oregon 4.685 6.218 
1 Nebraska 2.491 0.001 

DataFrame.join ist ein bisschen althergebrachte Methode und tut anscheinend nicht Spalte-auf-Spaltenverbindungen (ursprünglich indexierte es auf Spalte mit dem on Parameter, folglich die "Legacy" Bezeichnung).

+2

Interessant. Es sieht so aus, als müsste ich, um zu bekommen, was ich will, aufeinanderfolgende Merges durchführen, da 'merge' nur zwei DataFrames braucht. – Phil

+0

Ich hatte das gleiche Problem und fand diese Antwort. Es ist richtig. Von der 0.16.2-Dokumentation: Die zugehörige DataFrame.join-Methode verwendet merge intern für die Index-on-index- und index-on-column-Joins, verbindet jedoch standardmäßig Indizes, anstatt zu versuchen, gemeinsame Spalten zu verwenden (das Standardverhalten für die Zusammenführung). jdmarino