首页 > 解决方案 > sort_values() 与 'key' 对数据框中的一列元组进行排序

问题描述

我有以下df:

df = pd.DataFrame({'Params': {0: (400, 30), 1: (2000, 10), 2: (1200, 10), 3: (2000, 30), 4: (1600, None)}, 'mean_test_score': {0: -0.6197478578718253, 1: -0.6164605619489576, 2: -0.6229674626212879, 3: -0.7963084775995496, 4: -0.7854265341671137}})

我希望根据第一列中元组的第一个元素对其进行排序。

所需输出的第一列:{'Params': {0: (400, 30), 2: (1200, 10), 4: (1600, 10), 1: (2000, 10), 3: (2000, 30),

我尝试df.sort_values(by=('Params'), key=lambda x:x[0])像使用列表和 .sort 一样使用,但出现以下值错误:ValueError: User-provided key function must not change the shape of the array.

我查看了sort_values()的文档,但它对为什么 lambda 不起作用没有多大帮助。

编辑:在@DeepSpace 输入之后,使用df.sort_values(by='Params')'<' not supported between instances of 'NoneType' and 'int'

任何人都可以帮忙吗?

标签: pythonpandassortingtupleskey

解决方案


sort_values()的文档说

key应该期望 aSeries并返回一个与输入具有相同形状的系列。

df.sort_values(by=('Params'), key=lambda x:x[0])中,x实际上是Params列。通过使用 访问xx[0]您将返回 Series 的第一个元素x,该元素与输入 Series 的形状不同。因此给你错误。

如果你想按元组的第一个元素排序,你可以这样做

df.sort_values(by='Params', key=lambda col: col.map(lambda x: x[0]))

推荐阅读