• pandas 数据重塑--stack,pivot


    数据的重塑简单点说,就是为了数据展示更加的直观

    首先从一张图开始,也是大家常用的图:

    import numpy as np
    from pandas import DataFrame
    df = DataFrame({'水果':['苹果','梨','草莓'],
                   '数量':[3,4,5],
                   '价格':[4,5,6]})
    df
    

     out:

     先看看代码中使用完的效果,然后再来进行小结

    df.stack()
    

     

    初步发现:stack的作用是,提取表格中的行出来作为一级行,把列标提取出来作为二级的行,剩下的就是按照一级行分类后,二级行标对应的数据:

    验证发现:

    import pandas as pd
    from pandas import DataFrame
    df = DataFrame({'ID':['101','101','102','102','103','103'],
                   '物品':['小刀','笔','水','面包','笔','饼干'],
                   '数量':[4,3,5,4,6,5]})
    
    df
    

      

     为了方便处理数据,首先我们要把pandas默认生成的index去掉,选择ID为新的index

    df2 = df.setindex('ID')
    

      

     然后再进行stack处理

    df2.stack()
    

      

     是的,结果我们发现,数据比整理前更加的混乱了,不过stack跟我们之前的理解确实差不多的,于是我们就要继续想了,应该把物品对应的名称作为行的二级分类标题才对;

    于是我们可以这么做,在set_index的时候,我选择两列结果会怎么样呢?

     结果,好像已经满足我们的直观需求了,这个时候,发现都不必用stack函数来进行继续处理了.那我们来进行unstack处理下,看是什么样的结果:

     于是我又发现了,当我们使用了unstack参数后,就把原来表格的第一行自动转为了新的表的行,第二行就被转换成了列标,此时如果不是有数量这个看上去很"另类"的标值在,

    数据好像确实更直观了一些,那么有没有更好的办法呢?难道是set_index的时候要选择3列

     

     这么折腾一阵后,发现,结果比之前的更惨了,哎哟,这啥回事嘛?我到现在为止,用stack和unstack的方式确实没有发现更好的处理方式,如果有大神可以用这种方式做得更好的,欢迎指点;

    其实也没那么纠结,我们主要以处理问题为准,其他的不深究,于是就来了pivot的概念了,首先来展示一下,对上面一题,

    df.pivot('ID','物品','数量')  #pivot(index=None, columns=None, values=None)
    

     out:

    一看就明白,pivot使用起来就非常的清晰了,带三个参数,第一个是index,第二个是columns,第三个是数值型的。

    做统计的是,直接把数值型的列表给去除了,直接显示对应的数量;

  • 相关阅读:
    对比度受限的自适应直方图均衡化(CLAHE)
    双边滤波
    快速高斯滤波
    积分图像的应用(二):非局部均值去噪(NL-means)
    非局部均值去噪(NL-means)
    积分图像的应用(一):局部标准差 分类: 图像处理 Matlab 2015-06-06 13:31 137人阅读 评论(0) 收藏
    积分图像 分类: 图像处理 Matlab 2015-06-06 10:30 149人阅读 评论(0) 收藏
    双边滤波与引导滤波 分类: 图像处理 2015-04-29 14:52 48人阅读 评论(0) 收藏
    UE4射击小游戏原型
    UnrealEngine4 尝鲜
  • 原文地址:https://www.cnblogs.com/tinglele527/p/14227608.html
Copyright © 2020-2023  润新知