python - (Pandas) 正确的 lambda 表达式按值@索引位置 1 对列进行排序
问题描述
我正在尝试SrcWell
按值的索引位置 1 进行排序。我知道有一个关键字参数key
,其行为类似于 in key
,sorted
但是在尝试使用key
. 这是一个要作为 pandas DataFrame 加载的示例 CSV 文件:
SrcPlate SrcWell
PS000000123456 A4
PS000000123456 B7
PS000000123456 A7
PS000000123456 H6
PS000000123456 G6
PS000000123456 F6
SrcWell
还有一个按其数值排序的小脚本:
import pandas as pd
worklist = pd.read_csv('worklist.csv')
print(worklist.sort_values(by="SrcWell", key=lambda x: int(x[1])))
>>> [...] ValueError: invalid literal for int() with base 10: 'B7'
解决方案
尝试使用 .str 访问器和切片:
df.sort_values(by="SrcWell", key=lambda x: x.str[1])
输出:
SrcPlate SrcWell
0 PS000000123456 A4
3 PS000000123456 H6
4 PS000000123456 G6
5 PS000000123456 F6
1 PS000000123456 B7
2 PS000000123456 A7
正如@Ben.T 指出的,根据文档
key :可调用,可选
在排序之前将 key 函数应用于值。这类似于内置 sorted() 函数中的 key 参数,但显着的区别是这个 key 函数应该是矢量化的。它应该期望一个系列并返回一个与 输入具有相同形状的系列。它将独立应用于 by 中的每一列。
推荐阅读
- amazon-web-services - 将 Tableau Server 安装为 IaC 的最佳实践
- python-3.x - odoo 通过 xmlrpc 创建数据库
- python - 带有退出选项的 Python 3 菜单
- python - 使用 Pandas 进行过滤、转置和连接
- python - Python io:可以从字节创建 BufferedReader 吗?
- reactjs - 用于 TypeScript React 开发的 NeoVim
- python - mpmath 矩阵的块矩阵构造?
- android - Android studio - 从 dll 文件或 lib 文件调用函数
- php - {{ }} 在 laravel 刀片文件中的 for 循环内不起作用
- solidity - 令牌未显示