我在用字符串和浮点对列进行排序时遇到问题。以下是示例:
使用代码: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)
使用关键参数可以指定如何对值进行排序