排序时将字符串转换为整数

String Into Integer while sorting

想知道是否有办法仅在 sort_values() 过程中将字符串转换为整数,或者是否更容易在排序之前将变量转换为整数然后转换回排序后的字符串。

当前代码运行,但代码不正确,因为我相信D_Index实际上是一个字符串,所以它被排序为11,12,2,21,22,3 2,3,11,12,21,22。请参阅下面的 table 示例和代码。

Model D_Index
First 11
Second 12
Third 2
Fourth 21
Fifth 22
Sixth 3
df_New = df_Old.sort_values(['Model','D_Index'])

您可以将排序键传递给 sort_values:

out = df.sort_values(by='D_Index', key=lambda x: x.astype(int))

输出:

    Model D_Index
2   Third       2
5   Sixth       3
0   First      11
1  Second      12
3  Fourth      21
4   Fifth      22

如果要包含Model,可以使用系列名称:

df.sort_values(by=['Model','D_Index'], key=lambda x: x.astype(int) if x.name=='D_Index' else x)

输出(在您的示例中,排序很简单,因为没有 Model 具有不同的 D_Indexes):

    Model  D_Index
4   Fifth       22
0   First       11
3  Fourth       21
1  Second       12
5   Sixth        3
2   Third        2

您可以使用 lambda 函数:

df.sort_values(by='D_Index', key=lambda col: col.astype(float))