【问题标题】:Sort Series of Tuples by the second Item in Pandas按 Pandas 中的第二项对元组系列进行排序
【发布时间】:2018-07-04 10:05:11
【问题描述】:

我有一系列以 ID 为索引的元组和以坐标为值的元组。我想按经度订购 Serie,这是元组中的第二个元素。

函数df.sort_values() 按元组中的第一个元素排序。

【问题讨论】:

  • 分享样本数据

标签: python pandas sorting dataframe tuples


【解决方案1】:

在我看来,您不应该将纬度/经度数据作为元组存储在 Pandas 数据框中。你失去了数字运算的所有矢量化功能。

相反,您可以分成不同的系列。这也将简化您的排序语法:

df = pd.DataFrame({'LatLon': [(14, 45), (33, 64), (67, 13)]})

res = pd.DataFrame(df['LatLon'].values.tolist(), columns=['Lat', 'Lon'])\
        .sort_values('Lon')

print(res)

   Lat  Lon
2   67   13
0   14   45
1   33   64

【讨论】:

    【解决方案2】:

    您可以通过str[1]索引来选择select的值,并通过argsort排序值来获取位置,最后通过iloc重新排序:

    #data from jpp answer
    df = df.iloc[df['LatLon'].str[1].argsort()]
    print (df)
         LatLon
    2  (67, 13)
    0  (14, 45)
    1  (33, 64)
    

    详情

    print (df['LatLon'].str[1].argsort())
    0    2
    1    0
    2    1
    Name: LatLon, dtype: int64
    

    【讨论】:

    • 这只是对元组进行排序,重新分配时它的索引不一样,因此在重新分配无序系列的索引时会修改每个ID的坐标
    猜你喜欢
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 2012-05-28
    • 2012-03-13
    • 2022-01-28
    • 2021-05-03
    • 2012-06-29
    • 2017-06-17
    相关资源
    最近更新 更多