扫码一下
查看教程更方便
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