美文网首页
Pandas 层次化索引

Pandas 层次化索引

作者: 学人工智能的菜菜 | 来源:发表于2020-04-14 12:10 被阅读0次

    pandas的层次化索引

    层次化索引是pandas的一项比较重要的功能,它能够让你在一个轴上拥有多个索引级别,另一种说法是它能以低纬度形式处理高纬度数据
    series层次化索引
     # Series的层次化索引,索引是一个二维数组,相当于两个索引决定一个值
    data = Series(np.arange(1,10),index = [["a","a","a","b","b","c","c","d","d"],[1,2,4,1,2,5,1,2,6]])
    print(data)
    out:
    a  1    1
       2    2
       4    3
    b  1    4
       2    5
    c  5    6
       1    7
    d  2    8
       6    9
    dtype: int32
    
    
    #显示层次化索引
    print(data.index)
    out:
    MultiIndex(levels=[['a', 'b', 'c', 'd'], [1, 2, 4, 5, 6]],
               labels=[[0, 0, 0, 1, 1, 2, 2, 3, 3], [0, 1, 2, 0, 1, 3, 0, 1, 4]])
    
    #选取第一个索引为a的数据
    data['a']
    out:
    1    1
    2    2
    4    3
    dtype: int32
    
    data['c':'d']
    out:
    c  5    6
       1    7
    d  2    8
       6    9
    dtype: int32
    
    #通过unstack方法可以将Series变成一个DataFrame
    #数据的类型以及数据的输出结构都变成了DataFrame,对于不存在的位置使用NaN填充
    data.unstack()
    out:
    1   2   4   5   6
    a   1.0 2.0 3.0 NaN NaN
    b   4.0 5.0 NaN NaN NaN
    c   7.0 NaN NaN 6.0 NaN
    d   NaN 8.0 NaN NaN 9.0
    
    
    #通过stack方法,可以将DataFrame变成Series,它是unstack的逆运算
    data.unstack().stack()
    out:
    a  1    1.0
       2    2.0
       4    3.0
    b  1    4.0
       2    5.0
    c  1    7.0
       5    6.0
    d  2    8.0
       6    9.0
    dtype: float64
    
    DataFrame的层次化索引

    对于DataFrame来说,行和列都能够进行层次化索引。

    #DataFrame的行和列都是用层次化索引
    #也就是四个索引来决定一个值,将一个二维数据变成了一个四维数据
    data = DataFrame(np.arange(12).reshape(4,3),index = [["a","a","b","b"],[1,2,1,2]],columns=[["A","A","B"],["Z","X","C"]])
    print(data)
    print(data['A']) #这样子只能获取列,不能获取行,若想选取行,则
    #选取行
    data.loc['a']
    data.loc['a','A']
    out:
     A       B
         Z   X   C
    a 1  0   1   2
      2  3   4   5
    b 1  6   7   8
      2  9  10  11
         Z   X
    a 1  0   1
      2  3   4
    b 1  6   7
      2  9  10
    Z   X
    1   0   1
    2   3   4
    
    #对于dataframe,每条轴都可以分层索引,各层都可以有自己的名字的
    data.index.names =["row1","row2"]
    print(data)
    out:
     A       B
               Z   X   C
    row1 row2           
    a    1     0   1   2
         2     3   4   5
    b    1     6   7   8
         2     9  10  11
    
    data.columns.names =["column1","column2"]
    print(data)
    out:
    column1    A       B
    column2    Z   X   C
    row1 row2           
    a    1     0   1   2
         2     3   4   5
    b    1     6   7   8
         2     9  10  11
    
    ###根据级别汇总统计
    print(data)
    out:
    column1    A       B
    column2    Z   X   C
    row1 row2           
    a    1     0   1   2
         2     3   4   5
    b    1     6   7   8
         2     9  10  11
    
    #求和运算 根据行级别进行求和
    data.sum(level='row1')
    out:
    column1 A   B
    column2 Z   X   C
    row1            
    a   3   5   7
    b   15  17  19
    
    data.sum(level='row2')
    out:
    column1 A   B
    column2 Z   X   C
    row2            
    1   6   8   10
    2   12  14  16
    
    
    #根据列级别进行求和
    data.sum(level='column1',axis=1)
    out:
    column1 A   B
    row1    row2        
    a   1   1   2
    2   7   5
    b   1   13  8
    2   19  11
    
    data.sum(level='column2',axis=1)
    out:
    column2 C   X   Z
    row1    row2            
    a   1   2   1   0
    2   5   4   3
    b   1   8   7   6
    2   11  10  9
    
    

    相关文章

      网友评论

          本文标题:Pandas 层次化索引

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