美文网首页Pandas
Pandas层次化索引

Pandas层次化索引

作者: 午夜丶小学徒 | 来源:发表于2018-11-11 17:08 被阅读3次

    一、创建多层索引

    # 隐式构造
      - Series
      index = [['一班','一班','一班','一班','一班','二班','二班','二班','二班','二班'],np.arange(10)]
      s = Series(data=np.random.randint(150,size=10),index=index)
      s
      - DataFrame
      index = [['一班','一班','一班','二班','二班'],['张三','李四','王五','赵六','田七']]
      columns = [['期中','期中','期中','期末','期末','期末'],['语文','数学','英语','语文','数学','英语']]
      data = np.random.randint(0,150,size=(5,6))
      df = DataFrame(index=index,columns=columns,data=data)
      df
    # 显式构造pd.MultiIndex
      - array
        index = pd.MultiIndex.from_arrays([['一班','一班','一班','二班','二班'],['张三','李四','王五','赵六','田七']])
        columns = [['期中','期中','期中','期末','期末','期末'],['语文','数学','英语','语文','数学','英语']]
        data = np.random.randint(0,150,size=(5,6))
        df1 = DataFrame(index=index,columns=columns,data=data)
        df1
      - tuple
        index = pd.MultiIndex.from_tuples([('一班','张三'),('一班','李四'),('一班','王五'),('二班','赵六'),('二班','田七')])
        columns = [['期中','期中','期中','期末','期末','期末'],['语文','数学','英语','语文','数学','英语']]
        data = np.random.randint(0,150,size=(5,6))
        df2 = DataFrame(index=index,columns=columns,data=data)
        df2
      - product
        index = pd.MultiIndex.from_tuples([('一班','张三'),('一班','李四'),('一班','王五'),('二班','赵六'),('二班','田七')])
        columns = pd.MultiIndex.from_product([['一班','二班'],['语文','数学','英语']])
        data = np.random.randint(0,150,size=(5,6))
        df3 = DataFrame(index=index,columns=columns,data=data)
        df3
    
    pandas层次化.png

    二、多层索引对象的索引与切片操作

    1、Series的操作
        对于Series来说,直接中括号[]与使用.loc()完全一样,推荐使用.loc中括号索引和切片。
    2、DataFrame的操作
        1)可以直接使用列名称来进行列索引
          - df['期中'] # 期中下的语文数学英语列
        2)行多级索引的索引和切片操作
          - df.loc['一班',0][0] # 一班第0行第0列
          - df.loc['一班'][0:3] # 一班0-3行
        3)列多级索引的索引和切片操作
          - df['期中','语文'][0:3] # 期中下的语文列 前3行
          - df.iloc[0] # 第0行的所有数据
          - df.iloc[0][1] # 第0行第0列对应的数据
        注意在对行索引的时候,若一级行索引还有多个,对二级行索引会遇到问题!也就是说,无法
      直接对二级索引进行索引,必须让二级索引变成一级索引后才能对其进行索引!
    

    三、索引的堆(stack)

    - stack():使用stack的时候,level等于哪一个,哪一个就消失,出现在行里
    - unstack():使用unstack的时候,level等于哪一个,哪一个就消失,出现在列里
    

    四、聚合操作

    所谓的聚合操作:平均数,方差,最大值,最小值……
    【小技巧】axis=0 针对左边的行,axis=1 针对上边的行,level等于哪一个,哪一个就保留。
    # eg
      - df.mean(level=0,axis=0)
      - df.mean(level=0,axis=1)
      - df.mean(level=1,axis=1)
    

    相关文章

      网友评论

        本文标题:Pandas层次化索引

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