美文网首页python
unstack与stack实例解释

unstack与stack实例解释

作者: Jarvan_c806 | 来源:发表于2019-03-24 16:45 被阅读0次

    苦于在网上找不到对与unstack与stack的很直观对于我们这些小白很友好的解释,在自行研究一番后,决定自己写一个,用词不会很专业,只希望以最简单最直白的方式来解释。
    首先将我两个基友当做祭品献上,创建一个数据组:
    import pandas as pd
    data1={'姓名':['陈冠文','陈冠文','陈冠文','刘力','刘力','刘力','陈俞','陈俞','陈俞'],
    '属性':['颜值','幽默','运动','颜值','幽默','运动','颜值','幽默','运动'],
    '得分':[100,100,100,80,80,70,50,50,30]}
    df=DataFrame(data1)
    df = df.set_index(['姓名','属性'])
    df
    将姓名和属性设置为索引,如下图:


    image.png

    对于unstack和stack的官方解释,可以自行查阅。
    我只说下我自己的理解:
    stack简单说就是把columns转成index
    unstack就是把index转成columns

    再甚至,可以理解为:
    stack是一个‘逆时针’的旋转
    unstack是一个‘顺时针’旋转
    关于这个顺逆时针我在下面会说到。

    首先先来一个unstack的变化:
    在不设置level的情况下,转化过程就是我箭头方向的移动过程:


    image.png

    df.unstack()


    image.png

    默认是最里层的(属性),转到columns的最里层,也就是得分的‘下面’,
    它把index转变成了一个columns,所以看成是一个‘顺时针’的旋转。

    同理df.unstack().stack():


    image.png

    将columns转化为了index,可看成‘逆时针’的旋转。


    image.png

    明白了这个最基本的原理后,接下来进行一些变化:
    进行两次unstack:
    第一次:df.unstack()


    image.png

    第二次:df.unstack().unstack()


    image.png

    出现了不一样的变化:


    image.png

    它转变为了一个一维数据组(由于是中文,有点不太对齐,大致能看出,得分一栏,属相往下一栏,姓名往下一栏)

    你可以粗暴的理解为:pandas把它‘放平了’!

    得分,属性,姓名就是index,columns没有了,这会有助于你理解接下来的‘翻转’!

    此时看这张图:由于‘只有index,没有columns’,如果再进行stack逆时针旋转,columns就没有东西给你翻转了。


    image.png
    image.png

    报错了!
    此时,只能进行unstack翻转:
    df.unstack().unstack().unstack()


    image.png
    原理还是一样,默认最里层姓名一栏顺时针旋转到了columns一栏

    再来一次:df.unstack().unstack().unstack().unstack()


    image.png

    最里面的属性转到了columns的最里面,姓名一栏被顶到‘外面’去了

    理解完旋转过程后,接下来就是用level指定要旋转的列或行。


    image.png

    依次类推0,1,2,3...
    下面开始变形:
    df.unstack(level=0)


    image.png
    此时不是默认的最里面的属性一栏的旋转,而是我们指定的level=0的姓名一栏的顺时针旋转,旋转的位置依旧是columns的最里层
    注:旋转的对象可以指定,但是旋转后的位置只能是最里层

    同理:df.unstack(level=0).stack(level=0)


    image.png
    image.png
    理解完这些变化后,再复杂的多重索引列表都可以轻松‘翻转’到你想到的格式啦。

    相关文章

      网友评论

        本文标题:unstack与stack实例解释

        本文链接:https://www.haomeiwen.com/subject/ausuvqtx.html