2016-05-15 77 views
1

我嘗試以下操作:大熊貓合併不保留排序順序

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 

儘管sort=False已經輸入,返回的對象合併了表,但使用PdDistrict一些指標和改變的順序原始左邊數據框的行。

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

返回此(注意,PdDistrict的順序發生了變化)

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 

回答

5

你需要指定要如何在兩個dataframes合併。默認情況下,內部聯接由merge()模擬。但是,通過指定您想要進行左連接,將保留從df1開始的排序順序。因此,你只需添加how='left'

>>> 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 

此外,sort=False是默認的行爲 - 你不需要指定。

+0

太好了!正是我在找什麼!謝謝。 – Rockbar