Pandas 用数字字符串对列进行排序

Pet*_*hen 1 python sorting pandas

我有一个下面的数据框:

col1

Numb10
Numb11
Numb12
Numb7
Numb8
Run Code Online (Sandbox Code Playgroud)

如何按数字顺序排序:

col1

Numb7
Numb8
Numb10
Numb11
Numb12
Run Code Online (Sandbox Code Playgroud)

我尝试过但出现错误TypeError: cannot convert the series to <class 'int'>

df.sort_values(by = "col1", key = (lambda x: int(x[4:])))
Run Code Online (Sandbox Code Playgroud)

更新一下,缺了一个col1

Psi*_*dom 6

keyinsort_values将系列作为参数而不是单个元素。来自文档:

在排序之前将键函数应用于值。这类似于内置的sorted()函数中的key参数,显着的区别是这个key函数应该被向量化。它应该期望一个 Series 并返回一个与输入形状相同的 Series。它将独立地应用于每列。

在您的情况下,您可以使用.strandastype进行切片和类型转换:

df.sort_values(by='col1', key=lambda s: s.str[4:].astype(int))
     col1
3   Numb7
4   Numb8
0  Numb10
1  Numb11
2  Numb12
Run Code Online (Sandbox Code Playgroud)