Pandas层次化索引

一、创建多层索引

# 隐式构造
  - 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)
      </div>
    </div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值