pandas层次化索引

1.创建多层索引

1) 隐式构造

最常见的方法是给DataFrame构造函数的index参数传递两个或更多的数组

  • Series也可以创建多层索引

ndex = [[‘一班’,‘一班’,‘一班’,‘二班’,‘二班’,‘二班’,],[‘张三’,‘李四’,‘王五’,‘赵六’,‘田七’,‘孙八’]]
data = np.random.randint(80,150,size=(6,))
s = pd.Series(data=data,index=index)
s

index = [['一班','一班','一班','二班','二班','二班',],['张三','李四','王五','赵六','田七','孙八']]
columns=[['其中','其中','其中','期末','期末','期末'],
        ['语文','数学','英语','语文','数学','英语']]
data=np.random.randint(80,150,size=(6,6))
df = pd.DataFrame(data=data,index=index,columns=columns)
df

1) 显示构造pd.MultiIndex

  • 使用数组
index = pd.MultiIndex.from_arrays([['一班','一班','一班','二班','二班','二班',],['张三','李四','王五','赵六','田七','孙八']])
columns = pd.MultiIndex.from_arrays([['其中','其中','其中','期末','期末','期末'],['语文','数学','英语','语文','数学','英语']])
data = np.random.randint(80,150,size=(6,6))
df = pd.DataFrame(index=index,columns=columns,data=data)
df
  • 使用tuple
columns = pd.MultiIndex.from_tuples((('期中','语文'),('期中','数学'),('期中','英语'),
                                   ('期末','语文'),('期末','数学'),('期末','英语')))
index = pd.MultiIndex.from_arrays([['一班','一班','一班','二班','二班','二班',],['张三','李四','王五','赵六','田七','孙八']])
data = np.random.randint(80,150,size=(6,6))
df = pd.DataFrame(index=index,columns=columns,data=data)
df
  • 使用product
columns=pd.MultiIndex.from_product([['期中','期末'],['语文','数学','英语']])
index = pd.MultiIndex.from_arrays([['一班','一班','一班','二班','二班','二班',],['张三','李四','王五','赵六','田七','孙八']])
data = np.random.randint(80,150,size=(6,6))
df = pd.DataFrame(index=index,columns=columns,data=data)
df

2.多层索引对象的索引与切片操作

1) Series的操作

【重要】对于Series来说,直接中括号[]与使用.loc()完全一样,推荐使用中括号索引和切片。
(1) 索引
多层索引的索引和切片的原则: 不能直接索引内层索引.
s[('一班','张三')]
(2)切片

#会报错  UnsortedIndexError     Traceback (most recent call last)
s.loc[('一班','张三'):('二班','赵六')]
s.iloc[0:4]

1) DataFrame的操作

(1) 可以直接使用列名称来进行列索引

  • 列多级索引的索引和切片操作
df[('期中','语文')]
df.iloc[:,0:4]
  • 行多级索引的索引和切片操作
# 显示索引
df.loc[('一班','张三'),:]
df.iloc[0,:]

(2) 使用行索引需要用loc()函数

【极其重要】推荐使用loc()函数
注意在对行索引的时候,若一级行索引还有多个,对二级行索引会遇到问题!也就是说,无法直接对二级索引进行索引,必须让二级索引变成一级索引后才能对其进行索引!

3.索引的堆(stack)

其实就是行列索引之间的转化.
stack就是放列索引变成行索引
原来的df
在这里插入图片描述

df.stack()
在这里插入图片描述
df.unstack(fill_value=0)
在这里插入图片描述
df.stack(level=0).unstack(level=(0,1))
在这里插入图片描述

5.聚合操作

【注意】

  • 需要指定axis

  • 【小技巧】和unstack()相反,聚合的时候,axis等于哪一个,哪一个就保留。

  • 先确定要聚合的方向,聚合行还是聚合列

  • 确定在聚合的方向上,要留下的哪层索引,level等于哪一层
    在这里插入图片描述

# 1.计算各个科目期中期末平均成绩
df.mean(axis=1,level=1)
# 2计算各科目张三李四的最高分
df.max(axis=1,level=1)
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值