9-Pandas sorting排序

Pandas sorting排序

Pands 提供了两种排序方法,分别是按标签排序和按数值排序。本节讲解 Pandas 的排序操作。

下面创建一组 DataFrame 数据,如下所示:

import pandas as pd
import numpy as np
#行标签乱序排列,列标签乱序排列
unsorted_df=pd.DataFrame(np.random.randn(10,2),index=[1,6,4,2,3,5,9,8,0,7],columns=['col2','col1'])
print(unsorted_df)

输出结果:

       col2      col1
1 -0.064764 -1.390859
6 -1.729387  0.210522
4 -0.783614 -0.936503
2 -0.892115 -0.948152
3  0.206837 -0.330327
5  0.100021 -0.640862
9  1.164735  0.177476
8  0.396342 -0.697247
0  0.648810  0.075562
7  2.630982 -0.246838

上述示例,行标签和数值元素均未排序,下面分别使用标签排序、数值排序对其进行操作。

按标签排序

使用 sort_index() 方法对行标签排序,指定轴参数(axis)或者排序顺序。或者可以对 DataFrame 进行排序。默认情况下,按照行标签序排序。

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.013323  0.817171
1 -0.587502  1.157077
2 -1.050989 -0.390652
3  1.186827 -0.175019
4 -0.001765  0.606036
5 -0.245183 -2.370456
6 -0.550815 -1.073757
7  1.139061  0.856136
8 -2.551212  1.561623
9 -0.477405 -0.416104
1) 排序顺序

通过将布尔值传递给ascending参数,可以控制排序的顺序(行号顺序)。示例如下:

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  0.207660 -0.693535
8  0.243428  0.821085
7 -1.651267  0.776739
6  1.323955 -0.413546
5 -0.035917  0.996121
4 -0.432913  0.550918
3  0.159821  0.599407
2 -1.040912 -0.103187
1  0.661747  0.912794
0  0.104926  1.184431

按列标签排序

通过给 axis 轴参数传递 0 或 1,可以对列标签进行排序。默认情况下,axis=0 表示按行排序;而 axis=1 则表示按列排序。

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  0.115969 -0.706111
4 -0.376549  0.693983
6 -1.404271  1.074522
2  0.315593  0.920682
3  1.895498  0.464436
5 -0.183128  0.520173
9  0.703255 -0.549843
8  0.027205  2.062095
0  2.136995  0.772867
7  0.963484  1.279801

按值排序

与标签排序类似,sort_values() 表示按值排序。它接受一个by参数,该参数值是要排序数列的 DataFrame 列名。示例如下:

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 一起改变。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','col2'])
print (sorted_df)

输出结果:

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

排序算法

sort_values() 提供了参数kind用来指定排序算法。这里有三种排序算法:

  • mergesort
  • heapsort
  • quicksort

默认为 quicksort(快速排序) ,其中 Mergesort 归并排序是最稳定的算法。

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
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值