千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > 小红书达人带你学习DataFrame的排序

小红书达人带你学习DataFrame的排序

来源:千锋教育
发布人:syq
时间: 2022-08-12 13:48:00 1660283280

  现在直播带货太火了,宋宋最近也在小红书上败家了好几单,身为程序员的宋宋有点不甘心。拿到了一份小红书直播带货榜数据分析下,看一看小红书的卖货实力和用户分析?本案例主要针对DataFrame的排序知识点的讲解。

DataFrame的排序

  ### 数据排序

  在数据分析的使用过程中,数据排序是必不可少的。当然DataFrame就给我提供了一个非常方便的对数据排序的方法,那就是:

  sort_index和sort_values方法。在我们讲解DataFrame的排序之前,回顾下Series的排序。

  Series排序有两种:一个是sort_index,顾名思义根据Series中的索引对这些值进行排序。另一个是sort_values,根据Series中的值来排序。这两个方法都会返回一个新的Series。使用Series的排序可以对DataFrame中的某一列进行排序。比如:按照年龄排序

  ```

  df['age'].sort_values() # 获取age列,并进行排序

  ```

  #### 索引排序

  对于DataFrame来说也是一样,同样有根据值排序以及根据索引排序这两个功能。但是由于DataFrame是一个二维的数据,所以在使用上会有些不同。最主要的差别是在于Series只有一列,我们明确的知道排序的对象,但是DataFrame不是,它当中的索引就分为两种,分别是行索引以及列索引。所以我们在排序的时候**需要指定我们想要排序的轴**,也就是axis。

  ```

  df.sort_index(axis=0,ascending=False)

  # 其中ascending是用来指定排序的升降序的,默认是升序,如果是降序排列可以使用ascending=False

  ```  

屏幕快照 2021-07-22 下午5.55.43

  #### 值排序

  DataFrame的值排序有所不同,我们不能对行进行排序,**只能针对列**。我们通过by参数传入我们希望排序参照的列,可以是一列也可以是多列。比如:需要按照用户下单的金额排序,升序排列

  ```

  df.sort_values(by='revenue') # 通过by参数指定排序的列名

  ```

  结果:  

屏幕快照 2021-07-22 下午6.00.40

  或者是按照用户下单金额和消费的总金额排序,

  ```

  # 如果排序的列名是多个,则可以使用列表将多个列名放于列表中

  df.sort_values(by=['revenue','accumulation'])

  ```

  结果:  

屏幕快照 2021-07-22 下午6.04.23

  以上排序是默认的升序,如果需要获取用户下单金额最高的则需要,则需要降序排列查看。

  ```

  df.sort_values(by=['revenue','accumulation'],asccending=False)

  ``` 

屏幕快照 2021-07-22 下午6.06.33

  当然还可以在sort_values方法中指定,inplace=True 保留排序结果在原数据中,默认是False。也可以指定按照哪个轴排序使用axis,

  也可以指定排序的方式是:快速排序、合并排序、堆排序使用kind参数,默认是快速排序。(以下分别是合并排序和快排)  

屏幕快照 2021-07-22 下午6.24.57

  ### 数据汇总

  DataFrame中的汇总运算也就是**聚合运算**,比如我们最常见的sum方法,对一批数据进行聚合求和。还有mean方法,对数据进行均值运算等等。

  > max([axis=1|0])

  >

  > min([axis=1|0])

  >

  > sum([axis=1|0])

  >

  > mean([axis=1|0])

  >

  > count([axis=1|0])

  >

  > ....

  我们可以使用sum来对DataFrame的行或者列进行求和,如果不传任何参数,默认是对每一行进行求和,如果需要按照列求和则设置axis=1。比如求过往第三方购买的数量的总和

  ```python

  df['3rd'].sum()

  ```

  结果:

  > ```

  > 67329

  > ```

  当然我们也可以获取用户的购买金额revenue的均值

  ```

  df['revenue'].mean() # 默认axis=0

  ```

  结果:

  > ```

  > 398.2981660045499

  > ```

  获取用户注册6个月内的个数

  ```

  df.loc[df['lifecycle']=='A','lifecycle'].count()

  ```

  结果:

  > ```

  > 3541

  > ```

  获取消费总额最大的金额

  ```

  df['accumulation'].max()

  ```

  结果:

  > ```

  > 11597.9

  > ```

  由于DataFrame当中常常会有为NA的元素,所以我们可以通过skipna这个参数排除掉缺失值之后再计算平均值。另外还有一个很好用的方法是descirbe,可以返回DataFrame当中的**整体信息**。比如每一列的均值、样本数量、标准差、最小值、最大值等等。是一个常用的统计方法,可以用来了解DataFrame当中数据的分布情况。

  ```

  df.describe()

  ```

  结果:  

屏幕快照 2021-07-22 下午11.44.32

  其中std是求标准差,50%求中位数,var()求方差等...

  当然我们也可以同时获取用户的购买金额revenue的均值和消费总额最大的金额,此时我们需要使用agg方法完成。

  ```

  df.agg({'revenue':np.mean,'accumulation':np.max}) # 参数是一个字典,key为列名,value为要进行的聚合运算

  ```

  结果:  

屏幕快照 2021-07-22 下午11.42.08

  当然更多情况下,agg方法往往是结合分组groupby使用。也不是绝对的,根据实际的情况吧!

  更多关于Python 培训的问题,欢迎咨询千锋教育在线名师。千锋教育拥有多年IT培训服务经验,采用全程面授高品质、高体验培养模式,拥有国内一体化教学管理及学员服务,助力更多学员实现高薪梦想。

  注:本文部分文字和图片来源于网络,如有侵权,请联系删除。版权归原作者所有!

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT