【问题标题】:Pandas merge doesn't preserve sorting order熊猫合并不保留排序顺序
【发布时间】:2016-05-31 00:45:39
【问题描述】:

我正在尝试以下方法:

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)

return this(注意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

【问题讨论】:

    标签: python pandas merge


    【解决方案1】:

    您需要指定如何合并两个数据框。默认情况下,内部连接由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 是默认行为——您无需指定。

    【讨论】:

      猜你喜欢
      • 2018-01-07
      • 1970-01-01
      • 1970-01-01
      • 2019-09-24
      • 1970-01-01
      • 2017-02-13
      • 2023-01-04
      • 1970-01-01
      相关资源
      最近更新 更多