美文网首页
Python--pandas--unstack() 与stack

Python--pandas--unstack() 与stack

作者: 李小李的路 | 来源:发表于2019-06-13 00:02 被阅读0次

    概述

    • Python的pandas库是我们经常用到的库之一,不可避免地会应用到数据的reshape。其中,stack和unstack是我们经常用到的操作之一。很多人对这2个操作比较迷惑。

    • stack和unstack是python进行层次化索引的重要操作。层次化索引就是对索引进行层次化分类,便于使用,这里的索引可以是行索引,也可以是列索引。

    • 常见的数据的层次化结构有两种,一种是表格,一种是“花括号”,即下面这样的两种形式:


      表格格式
      花括号格式.png
    • 表格在行列方向上均有索引,花括号结构只有“列方向”上的索引。

    • 其实,应用stack和unstack只需要记住下面的知识点即可:

      • stack: 将数据从”表格结构“变成”花括号结构“,即将其列索引变成行索引。
      • unstack: 数据从”花括号结构“变成”表格结构“,即要将其中一层的行索引变成列索引。如果是多层索引,则以上函数是针对内层索引(这里是store)。利用level可以选择具体哪层索引。

    入门级demo

    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    # @Time    : 2019-06-12 23:48
    # @Author  : LiYahui
    # @Description :  stack demo
    import pandas as pd
    import numpy as np
    from pandas import Series,DataFrame
    data=DataFrame(np.arange(12).reshape((3,4)),index=pd.Index(['street1','street2','street3']),
                   columns=pd.Index(['store1','store2','store3','store4']))
    print('----------data--------')
    print(data)
    print('-------------data2----------------------------\n')
    data2=data.stack()
    data3=data2.unstack()
    print(data2)
    print('--------------data3---------------------------\n')
    print(data3)
    
    data4=data2.unstack(level=0)
    print('-------data4----------')
    print(data4)
    data5=data2.unstack(level=-1) # 默认的level=-1,内层的索引
    print('------data5--------')
    print(data5)
    '''
    ----------data--------
             store1  store2  store3  store4
    street1       0       1       2       3
    street2       4       5       6       7
    street3       8       9      10      11
    -------------data2----------------------------
    
    street1  store1     0
             store2     1
             store3     2
             store4     3
    street2  store1     4
             store2     5
             store3     6
             store4     7
    street3  store1     8
             store2     9
             store3    10
             store4    11
    dtype: int64
    --------------data3---------------------------
    
             store1  store2  store3  store4
    street1       0       1       2       3
    street2       4       5       6       7
    street3       8       9      10      11
    -------data4----------
            street1  street2  street3
    store1        0        4        8
    store2        1        5        9
    store3        2        6       10
    store4        3        7       11
    ------data5--------
             store1  store2  store3  store4
    street1       0       1       2       3
    street2       4       5       6       7
    street3       8       9      10      11
    '''
    
    • 可以看到:使用stack函数,将data的列索引['store1','store2','store3’,'store4']转变成行索引(第二层),便得到了一个层次化的Series(data2),使用unstack函数,将data2的第二层行索引转变成列索引(默认内层索引,level=-1),便又得到了DataFrame(data3)
    • 下面的例子我们利用level选择具体哪层索引。
    
    data4=data2.unstack(level=0)
    print(data4)
    '''
            street1  street2  street3
    store1        0        4        8
    store2        1        5        9
    store3        2        6       10
    store4        3        7       11
    '''
    
    • 我们可以清晰看到,当我们取level=0时,即最外层索引时,unstack把行索引['street1','street2','street3’]变为了列索引。

    相关文章

      网友评论

          本文标题:Python--pandas--unstack() 与stack

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