首页 > 解决方案 > 如何按列表的第二个元素对 Python DataFrame 进行排序

问题描述

所以标题有点混乱,但本质上,我有一个包含两列的数据框,一列用于字符(“c”),另一列用于字符坐标(“loc”)。我想按 Y 坐标对数据框进行排序。到目前为止,我已经设法使用 sort_values() 函数按 X 坐标对数据帧进行排序:

df = pd.DataFrame({"c":["i", "a"," d","m"], "loc":[[1, 2], [3, 3], [4, 2], [3,5]]})
df.sort_values(by=["loc"], inplace=True)

输出:

    c   loc
0   i  [1, 2]
1   a  [3, 3]
3   m  [3, 5]
2   d  [4, 2]

我的目标是:

    c   loc
0   i  [1, 2]
2   d  [4, 2]
1   a  [3, 3]
3   m  [3, 5]

循环遍历数据帧并反转 y 和 x 值不是一种选择,因为完整的数据帧将非常大。我认为这应该是可能的,因为新版本的 pd.df.sort_values() 有一个“关键”输入(链接到 pd.df.sort_values() 文档),但我对“关键”输入不够熟悉正确执行此操作。

标签: pythonpandasdataframesorting

解决方案


使用key参数sort_values

df.sort_values(by ='loc', key=lambda x: x.str[1])

输出:

    c     loc
0   i  [1, 2]
2   d  [4, 2]
1   a  [3, 3]
3   m  [3, 5]

推荐阅读