2016-05-15 1 views
1

Ich versuche folgende:Pandas fusionieren nicht beibehalten, um das Sortieren

PoliceStations_raw=pd.DataFrame(
[['BAYVIEW' ,37.729732,-122.397981], 
['CENTRAL' ,37.798732,-122.409919], 
['INGLESIDE' ,37.724676,-122.446215], 
['MISSION' ,37.762849,-122.422005], 
['NORTHERN' ,37.780186,-122.432467], 
['PARK'  ,37.767797,-122.455287], 
['RICHMOND' ,37.779928,-122.464467], 
['SOUTHERN' ,37.772380,-122.389412], 
['TARAVAL' ,37.743733,-122.481500], 
['TENDERLOIN',37.783674,-122.412899]],columns=['PdDistrict','XX','YY']) 


df1=pd.DataFrame([[0,'CENTRAL'],[1,'TARAVAL'],[3,'CENTRAL'],[2,'BAYVIEW']]) 
df1.columns = ['Index','PdDistrict'] 


    Index PdDistrict 
0 0 CENTRAL 
1 1 TARAVAL 
2 3 CENTRAL 
3 2 BAYVIEW 

trotz in sort=False getippt zu haben, das zurückgegebene Objekt hat die Tabelle zusammengefasst aber PdDistrict als eine Index verwendet und hat die Reihenfolge der geändert die Zeilen des ursprünglichen linken Datenrahmens.

pd.merge(df1,PoliceStations_raw,sort=False) 

gibt diese (beachten Sie, dass die Reihenfolge der PdDistrict geändert)

Index PdDistrict XX  YY 
0 0 CENTRAL 37.798732 -122.409919 
1 3 CENTRAL 37.798732 -122.409919 
2 1 TARAVAL 37.743733 -122.481500 
3 2 BAYVIEW 37.729732 -122.397981 

Antwort

5

Sie müssen angeben, wie Sie die beiden Datenrahmen zusammengefügt werden sollen. Standardmäßig wird eine innere Verknüpfung von merge() emuliert. Wenn Sie jedoch einen linken Join angeben möchten, bleibt die Sortierreihenfolge von df1 erhalten. So müssen Sie einfach how='left' hinzuzufügen:

>>> pd.merge(df1, PoliceStations_raw, how='left') 
    Index PdDistrict   XX   YY 
0  0 CENTRAL 37.798732 -122.409919 
1  1 TARAVAL 37.743733 -122.481500 
2  3 CENTRAL 37.798732 -122.409919 
3  2 BAYVIEW 37.729732 -122.397981 

Zusätzlich sort=False ist das Standardverhalten - Sie nicht, dass angeben.

+0

Großartig! Genau das, was ich gesucht habe! Vielen Dank. – Rockbar