Lesson10——Pandas sorting排序
1 简介
Pands 提供了两种排序方法,分别是按标签排序和按数值排序。本节讲解 Pandas 的排序操作。
下面创建一组 DataFrame 数据,如下所示:
#行标签乱序排列,列标签乱序排列
unsorted_df=pd.DataFrame(np.random.randn(5,2),index=[1,4,2,3,5],columns=['col2','col1'])
print(unsorted_df)
输出结果:
col2 col1
1 1.763237 -0.039505
4 0.040696 1.928657
2 0.625972 -1.389002
3 -1.236539 0.491185
5 -1.308479 -1.146221
上述示例,行标签和数值元素均未排序,下面分别使用标签排序、数值排序对其进行操作。
2 按标签排序
使用 sort_index() 方法对行标签排序,指定轴参数(axis)或者排序顺序。或者可以对 DataFrame 进行排序。默认情况下,按照行标签序排序。
示例如下:
print("原始数据为:")
print(unsorted_df)
print("排序后的数据为:")
print(unsorted_df.sort_index())
输出结果:
原始数据为:
col2 col1
1 1.763237 -0.039505
4 0.040696 1.928657
2 0.625972 -1.389002
3 -1.236539 0.491185
5 -1.308479 -1.146221
排序后的数据为:
col2 col1
1 1.763237 -0.039505
2 0.625972 -1.389002
3 -1.236539 0.491185
4 0.040696 1.928657
5 -1.308479 -1.146221
2.1 排序顺序
通过将布尔值传递给ascending参数,可以控制排序的顺序(行号顺序)。示例如下:
print("原始数据为:")
print(unsorted_df)
print("排序后的数据为:")
print(unsorted_df.sort_index(ascending=False))
输出结果:
原始数据为:
col2 col1
1 1.763237 -0.039505
4 0.040696 1.928657
2 0.625972 -1.389002
3 -1.236539 0.491185
5 -1.308479 -1.146221
排序后的数据为:
col2 col1
5 -1.308479 -1.146221
4 0.040696 1.928657
3 -1.236539 0.491185
2 0.625972 -1.389002
1 1.763237 -0.039505
3 按列标签排序
通过给 axis 轴参数传递 0 或 1,可以对列标签进行排序。默认情况下,axis=0 表示按行排序;而 axis=1 则表示按列排序。
print("原始数据为:")
print(unsorted_df)
print("排序1后的数据为:")
print(unsorted_df.sort_index(ascending=False,axis =1))
print("排序2后的数据为:")
print(unsorted_df.sort_index(ascending=True,axis =1))
输出结果:
原始数据为:
col2 col1
1 1.763237 -0.039505
4 0.040696 1.928657
2 0.625972 -1.389002
3 -1.236539 0.491185
5 -1.308479 -1.146221
排序1后的数据为:
col2 col1
1 1.763237 -0.039505
4 0.040696 1.928657
2 0.625972 -1.389002
3 -1.236539 0.491185
5 -1.308479 -1.146221
排序2后的数据为:
col1 col2
1 -0.039505 1.763237
4 1.928657 0.040696
2 -1.389002 0.625972
3 0.491185 -1.236539
5 -1.146221 -1.308479
4 按值排序
与标签排序类似,sort_values() 表示按值排序。它接受一个by参数,该参数值是要排序数列的 DataFrame 列名。示例如下:
print("原始数据为:")
print(unsorted_df)
print("排序1后的数据为:")
print(unsorted_df.sort_values(by='col1'))
print("排序2后的数据为:")
print(unsorted_df.sort_values(by=['col1','col2']))
输出结果:
原始数据为:
col2 col1
1 1.763237 -0.039505
4 0.040696 1.928657
2 0.625972 -1.389002
3 -1.236539 0.491185
5 -1.308479 -1.146221
排序1后的数据为:
col2 col1
1 1.763237 -0.039505
4 0.040696 1.928657
2 0.625972 -1.389002
3 -1.236539 0.491185
5 -1.308479 -1.146221
排序2后的数据为:
col1 col2
1 -0.039505 1.763237
4 1.928657 0.040696
2 -1.389002 0.625972
3 0.491185 -1.236539
5 -1.146221 -1.308479
注意:当对 col1 列排序时,相应的 col2 列的元素值和行索引也会随 col1 一起改变。
控制升序、降序,示例如下:
print("原始数据为:")
print(unsorted_df)
print("排序3后的数据为:")
print(unsorted_df.sort_values(ascending=False,by=['col1','col2']))
print("排序4后的数据为:")
print(unsorted_df.sort_values(ascending=True,by=['col1','col2']))
输出结果:
原始数据为:
col2 col1
1 1.763237 -0.039505
4 0.040696 1.928657
2 0.625972 -1.389002
3 -1.236539 0.491185
5 -1.308479 -1.146221
排序3后的数据为:
col2 col1
4 0.040696 1.928657
3 -1.236539 0.491185
1 1.763237 -0.039505
5 -1.308479 -1.146221
2 0.625972 -1.389002
排序4后的数据为:
col2 col1
2 0.625972 -1.389002
5 -1.308479 -1.146221
1 1.763237 -0.039505
3 -1.236539 0.491185
4 0.040696 1.928657
5 排序算法
sort_values() 提供了参数 kind 用来指定排序算法。这里有三种排序算法:
- mergesort
- heapsort
- quicksort
默认为 quicksort(快速排序) ,其中 Mergesort 归并排序是最稳定的算法。
print("原始数据为:")
print(unsorted_df)
print("排序5后的数据为:")
print(unsorted_df.sort_values(ascending=False,by='col1',kind='mergesort'))
输出结果:
原始数据为:
col2 col1
1 1.763237 -0.039505
4 0.040696 1.928657
2 0.625972 -1.389002
3 -1.236539 0.491185
5 -1.308479 -1.146221
排序5后的数据为:
col2 col1
4 0.040696 1.928657
3 -1.236539 0.491185
1 1.763237 -0.039505
5 -1.308479 -1.146221
2 0.625972 -1.389002