一般来说mysql中存储的数据是面向列式的,这种格式非常善于新增数据或者删除数据,如果数据量比较大的话,还可以很方便地按行进行拆分,然后分片处理。

Pandas系列(十五)stack和pivot实现数据透视

  但是在数据分析时,我们更期望日期是行索引,评分是列索引,中间每个单元格的值是对应的数据。那如何将左边的数据变成右边的数据形式呢?

  这就是将列示数据变成二维交叉形式,便于分析,这就叫做重塑透视

经过统计得到多维度指标数据

  在实际的场景中经常需要指定多个维度,计算聚合后的指标。比如像统计电影评分数据集中每个月份的每种评分(1-5分)被评分多少次。

  读取数据,并利用pandas中的to_datetime方法将时间转换为日期的形式:

Pandas系列(十五)stack和pivot实现数据透视

  此时pdata的格式变成datetime64[ns]格式,转换成这种格式的好处在于可以直接使用pandasdt.month得到月份,之后按照月份和打分等级进行多层groupby,之后挑选出"UserID"这一列,再调用聚合方法agg,调用np.sum进行计数。

Pandas系列(十五)stack和pivot实现数据透视

  对于上述这样的格式数据,想要去查看按月份,不同评分的次数趋势,是没法实现的,需要将数据变换成每个评分是一列(x轴是月份,y轴是评分,中间是数值这种二维形式)。

使用unstack实现数据二维透视

  调用unstack()方法可以实现:对比按照月份的不同评分的数量趋势:

Pandas系列(十五)stack和pivot实现数据透视

  从上图所示结果可以看出,大家在一月份对评分不感兴趣,在八月份评分最多。

  unstackstack是互逆操作:

Pandas系列(十五)stack和pivot实现数据透视

使用pivot简化透视

  调用pivot方法直接指定xy,和数值这三列可以直接实现数据的透视:

Pandas系列(十五)stack和pivot实现数据透视

  pivot方法相当于对df使用set_index创建分层索引,然后调用unstack

相关文章: