0
点赞
收藏
分享

微信扫一扫

图解pandas的排序sort_values机制

图解Pandas的排序sort_values函数

大家好,我是Peter~

在上一篇pandas的文章中已经介绍排名机制中rank函数的使用。其实在实现排名的过程,已经顺带实现了排序的功能;但是pandas中还有一个重要的方法来解决排序问题:sort_values。

Pandas连载

Pandas文章已经形成连载,前10篇文章分别是:

参数解释

DataFrame.sort_values(by, 
               axis=0, 
               ascending=True, 
               inplace=False, 
               kind='quicksort', 
               na_position='last', # last,first;默认是last
               ignore_index=False, 
               key=None)

参数的具体解释为:

  • by:表示根据什么字段或者索引进行排序,可以是一个或多个
  • axis:排序是在横轴还是纵轴,默认是纵轴axis=0
  • ascending:排序结果是升序还是降序,默认是升序
  • inplace:表示排序的结果是直接在原数据上的就地修改还是生成新的DatFrame
  • kind:表示使用排序的算法,快排quicksort,,归并mergesort, 堆排序heapsort,稳定排序stable ,默认是 :快排quicksort
  • na_position:缺失值的位置处理,默认是最后,另一个选择是首位
  • ignore_index:新生成的数据帧的索引是否重排,默认False(采用原数据的索引)
  • key:排序之前使用的函数

参数案例说明

下面会通过不同的案例来说明各个参数的使用方法和含义,模拟的第一份数据如下,里面有一个缺失值:

df = pd.DataFrame({
    '姓名': ['Tom', 'Peter', 'Jack', 'Jim', 'Mike', 'Nob'],
    '语文': [112, 112, 131, 98, 117, 124],
    '数学': [127, 139, 100, 133, 122, 114],
    '外语': [139, 88, 140, np.nan, 122, 114],   # 存在缺失值
    '住址': ['深圳', '广州', '深圳', '珠海', '广州', '东莞']}
)

df  

by

by参数是必需的,也是最简单的参数:我们必须指定按照哪个列属性或者行索引来排序,可以是一个或多个,by关键字可以省略。

df.sort_values(by="数学")   
df.sort_values(by=["语文","数学"])  # 多个字段的排序

axis

axis参数表示的是在哪个方向上排序,axis=0纵轴,axis=1横轴,看一份新的模拟数据:

data = pd.DataFrame({'a':[7,4,6,3],
                     'b':[4,3,2,1],
                     'c':[8,9,5,1]}) 
data

# 结果
  a b c
0   7   4   8
1   4   3   9
2   6   2   5
3   3   1   1

inplace

当inplace=True的时候,原数据在排序之后会直接修改:

ascending

可以是一个或者多个字段的排序,通过列表的形式指定:

df.sort_values(by="数学",ascending=False)   # 一个字段排序

df.sort_values(by=["语文","数学"],  # 多个字段的不同排序方式
               ascending=[True,False]
              )  

na_position

缺失值的位置处理:默认是最后,也可以放到最前面:

上面默认是在末尾。也可以放在首位:

ignore_index

表示新生成的数据中的索引是采用原数据的索引还是新生成的0,1,2,3…...

key

表示在排序之前使用的函数:

为了解释key参数,我们再模拟一份数据:

data1 = pd.DataFrame({
    'col1': [2, 1, 9, 8, 7, 4],
    'col2': [0, 1, 9, 4, 2, 3],
    'col3': ['a', 'e', 'F', 'B', 'c', 'D']
})

data1

上面的例子很好地显示了参数key的使用,解释下上面两行代码的运行结果,我们对col3字段排序:

  • 默认情况下,字母是按照它们对应的ASCII码进行比较的(A-65,a-97);所以升序的结果就是:BDFace
  • 加上了key参数,我们写了一个匿名函数lambda,作用是将col3中的字符串全部变成小写字母,这样升序自然是aBcDeF,因为此时的BDF变成了bdf

总结

排序sort_values函数在平时使用的频率是非常高的,经常需要对销售数据做TopN分析。它能够很快地运用于电商领域,包含TopN的销售额、用户、商品、销售员业绩等;不同学科的排名,学生的成绩等诸多场景,希望对读者有所帮助。

举报

相关推荐

Sort排序

sort排序:

0 条评论