小红书达人带你学习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
```
#### 值排序
DataFrame的值排序有所不同,我们不能对行进行排序,**只能针对列**。我们通过by参数传入我们希望排序参照的列,可以是一列也可以是多列。比如:需要按照用户下单的金额排序,升序排列
```
df.sort_values(by='revenue') # 通过by参数指定排序的列名
```
结果:
或者是按照用户下单金额和消费的总金额排序,
```
# 如果排序的列名是多个,则可以使用列表将多个列名放于列表中
df.sort_values(by=['revenue','accumulation'])
```
结果:
以上排序是默认的升序,如果需要获取用户下单金额最高的则需要,则需要降序排列查看。
```
df.sort_values(by=['revenue','accumulation'],asccending=False)
```
当然还可以在sort_values方法中指定,inplace=True 保留排序结果在原数据中,默认是False。也可以指定按照哪个轴排序使用axis,
也可以指定排序的方式是:快速排序、合并排序、堆排序使用kind参数,默认是快速排序。(以下分别是合并排序和快排)
### 数据汇总
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()
```
结果:
其中std是求标准差,50%求中位数,var()求方差等...
当然我们也可以同时获取用户的购买金额revenue的均值和消费总额最大的金额,此时我们需要使用agg方法完成。
```
df.agg({'revenue':np.mean,'accumulation':np.max}) # 参数是一个字典,key为列名,value为要进行的聚合运算
```
结果:
当然更多情况下,agg方法往往是结合分组groupby使用。也不是绝对的,根据实际的情况吧!
更多关于Python 培训的问题,欢迎咨询千锋教育在线名师。千锋教育拥有多年IT培训服务经验,采用全程面授高品质、高体验培养模式,拥有国内一体化教学管理及学员服务,助力更多学员实现高薪梦想。
注:本文部分文字和图片来源于网络,如有侵权,请联系删除。版权归原作者所有!