Python Pandas Sorting 排序

Pandas 中有两种排序方式。分别是按标签排序和按值排序。

首先让我们看下面的例子

import pandas as pd
import numpy as np

unsorted_df=pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],columns=['col2','col1'])
print(unsorted_df)

运行示例

输入结果如下

       col2      col1
1 -0.754122  1.179566
4 -0.426293  0.975411
6 -0.989756  0.903959
2  0.237250  0.275672
3  0.040070  0.032340
5 -0.455715 -1.267785
9 -1.263578 -1.343651
8  0.336310 -0.040857
0 -0.121682 -0.157120
7  0.800431 -2.368444

unsorted_df 中,标签和值是无序的。下面让我们看看如何对这些进行排序。


按标签排序

还是用上面的数据,我们使用标签来进行排序。这里需要用到 sort_index() 方法,该方法可以指定 轴参数 来进行排序,也可以指定排序顺序(升序或者降序)。默认情况下是按照升序来排序

import pandas as pd
import numpy as np

unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],columns = ['col2','col1'])

sorted_df=unsorted_df.sort_index()
print(sorted_df)

运行示例

运行结果如下

       col2      col1
0 -1.227543  1.087398
1  0.619055 -0.084167
2  1.495747 -0.734176
3  1.107145 -0.801063
4  0.125485  0.489480
5 -1.410041 -1.817615
6 -0.597901  0.049096
7  0.737757 -1.930583
8  0.503753  0.421773
9  0.900268 -0.212036

我们看到,已经按照索引进行排序了。接下来我们指定排序的顺序,使其按照降序排序。通过将布尔值传递给升序参数,例如 ascending=False 是降序,可以控制排序的顺序。

import pandas as pd
import numpy as np

unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],columns = ['col2','col1'])

sorted_df = unsorted_df.sort_index(ascending=False)
print(sorted_df)

运行示例

运行结果如下

       col2      col1
9  1.383228  1.773347
8  0.917062 -0.129475
7 -1.090091  0.077232
6  0.304891  0.321144
5  0.655564 -1.476603
4 -0.135941 -0.148971
3  0.679228 -1.174325
2 -1.343877 -0.087674
1  0.495099  1.433315
0 -1.748802 -0.293519

通过上面的结果我们可以看出,已经按照索引值降序排序了。接下来我们对列进行排序。通过传递值为 0 或 1 给 axis 参数,可以对列标签进行排序。默认情况下,axis=0,是按行排序。

import pandas as pd
import numpy as np
 
unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],columns = ['col2','col1'])
 
sorted_df=unsorted_df.sort_index(axis=1)

print(sorted_df)

运行示例

运行结果如下

       col1      col2
1 -2.070909 -0.209674
4 -0.002912  1.188847
6  0.827777  1.538288
2  0.976037 -0.516518
3  0.194899 -1.288762
5  0.004413 -0.015863
9  0.023259 -1.050131
8  1.115528 -2.037995
0  0.076436 -0.147110
7  0.813614  0.438045

按值进行排序

要按照值对数据进行排序,需要用到的方法是 sort_values()。该方法有一个参数 by,主要用来指定按照那一列的值来进行排序

import pandas as pd
import numpy as np

unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
sorted_df = unsorted_df.sort_values(by='col1')

print(sorted_df)

运行示例

运行结果如下

   col1  col2
1     1     3
2     1     2
3     1     4
0     2     1

col1 值已排序,相应的 col2 值和行索引将随 col1 一起改变。因此,它们看起来还是像没有排序。

下面我们指定多个列来进行值排序

import pandas as pd
import numpy as np

unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
sorted_df = unsorted_df.sort_values(by=['col1','col2'])

print(sorted_df)

运行示例

运行结果如下

   col1  col2
2     1     2
1     1     3
3     1     4
0     2     1

排序算法

sort_values()提供了归并排序tml)、堆排序ml)和快速排序的算法。归并排序 是唯一稳定的算法。

import pandas as pd
import numpy as np

unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
sorted_df = unsorted_df.sort_values(by='col1' ,kind='mergesort')

print(sorted_df)

运行示例

运行结果如下

   col1  col2
1     1     3
2     1     2
3     1     4
0     2     1

查看笔记

扫码一下
查看教程更方便