一、创建多层索引
- 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
- 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
二、多层索引对象的索引与切片操作
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等于哪一个,哪一个就保留。
- df.mean(level=0,axis=0)
- df.mean(level=0,axis=1)
- df.mean(level=1,axis=1)
</div>
</div>