Pandas函数排序不匹配



我在用字符串和浮点对列进行排序时遇到问题。以下是示例:

使用代码:df.sort_values([0, 1], ascending=[True, True])

输入:

0              1   2
0   JJAA   Extensão 0.0   4
1   JJAA   Extensão 6.0   3
2   JJAA  Extensão 12.0   3
3   JJAT   Extensão 0.0   3
4   JJAT   Extensão 6.0   2
5   JJSL  Extensão 18.0   1
6   JJSP  Extensão 12.0   3
7   JJSP  Extensão 24.0   1
0   JJAA      Perna 1.5   4
1   JJAA      Perna 4.5  16
2   JJAA      Perna 6.0   8
3   JJAA      Perna 7.5   4
4   JJAA      Perna 9.0   8
5   JJAT      Perna 3.0   4
6   JJAT      Perna 6.0   4
7   JJAT      Perna 7.5   4
8   JJAT      Perna 9.0   4
9   JJAT     Perna 10.5   4
10  JJSL      Perna 7.5   4
11  JJSP      Perna 4.5   4
12  JJSP      Perna 6.0   4
13  JJSP      Perna 7.5   8

输出:

0              1      2
0   JJAA   Extensão 0.0   4
** 2   JJAA  Extensão 12.0   3 **
1   JJAA   Extensão 6.0   3
0   JJAA      Perna 1.5   4
1   JJAA      Perna 4.5  16
2   JJAA      Perna 6.0   8
3   JJAA      Perna 7.5   4
4   JJAA      Perna 9.0   8
3   JJAT   Extensão 0.0   3
4   JJAT   Extensão 6.0   2
** 9   JJAT     Perna 10.5   4 **
5   JJAT      Perna 3.0   4
6   JJAT      Perna 6.0   4
7   JJAT      Perna 7.5   4
8   JJAT      Perna 9.0   4
5   JJSL  Extensão 18.0   1
10  JJSL      Perna 7.5   4
6   JJSP  Extensão 12.0   3
7   JJSP  Extensão 24.0   1
11  JJSP      Perna 4.5   4
12  JJSP      Perna 6.0   4
13  JJSP      Perna 7.5   8

修复"**"行与正确的顺序不匹配。我认为这种类型是";看到";只有浮点值的第一个数字。有什么解决办法吗?

让我们试试natsort

import natsort as ns 
out = df.iloc[ns.index_natsorted(df['1'])].sort_values(['0'],kind='mergesort')
Out[15]: 
0             1   2
0   JJAA   Extensão0.0   4
1   JJAA   Extensão6.0   3
2   JJAA  Extensão12.0   3
0   JJAA      Perna1.5   4
1   JJAA      Perna4.5  16
2   JJAA      Perna6.0   8
3   JJAA      Perna7.5   4
4   JJAA      Perna9.0   8
3   JJAT   Extensão0.0   3
4   JJAT   Extensão6.0   2
5   JJAT      Perna3.0   4
6   JJAT      Perna6.0   4
7   JJAT      Perna7.5   4
8   JJAT      Perna9.0   4
9   JJAT     Perna10.5   4
5   JJSL  Extensão18.0   1
10  JJSL      Perna7.5   4
6   JJSP  Extensão12.0   3
7   JJSP  Extensão24.0   1
11  JJSP      Perna4.5   4
12  JJSP      Perna6.0   4
13  JJSP      Perna7.5   8

看起来第一列是按str值排序的。如果该列应该存储浮点值,则可以返回到创建该数据帧的位置来更正数据类型。然而,作为一个快速解决方案,你应该能够使用

df.sort_values([0, 1], ascending=[True, True], key=float)

使用关键参数可以指定如何对值进行排序

最新更新