python - 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'
任何人都可以帮忙吗?
解决方案
sort_values()的文档说
key
应该期望 aSeries
并返回一个与输入具有相同形状的系列。
在df.sort_values(by=('Params'), key=lambda x:x[0])
中,x
实际上是Params
列。通过使用 访问x
,x[0]
您将返回 Series 的第一个元素x
,该元素与输入 Series 的形状不同。因此给你错误。
如果你想按元组的第一个元素排序,你可以这样做
df.sort_values(by='Params', key=lambda col: col.map(lambda x: x[0]))
推荐阅读
- prolog - Problog - 概率图示例
- angular - 解析器不起作用 - 角度
- openstreetmap - osrm 本地找不到路由
- docker - Azure DevOps Maven Docker 构建 - 找不到目标文件夹
- c# - 提取具有标签、管道和 6 个字符的字符串
- node.js - 找不到 Socket.io.js (404)
- java - 应用程序因 Unhandeled 异常而崩溃:适配器的内容已更改但 ListView 未收到通知
- android - 在 Android 中调用 .NET Web API Post Service 发送空消息
- android - 无法在 NestedScrollView 内完全滚动
- flask - Flask Swagger 文档查询参数 GET 需要