创建多层行索引
#1,隐式构造 # 给DataFrame构造函数的index参数传递两个或更多的数组
import numpy as np import pandas as pd from pandas import Series, DataFrame
#利用Series创建多层索引 data = np.random.randint(0,100,size=8) index = [['7月','7月','7月','7月','8月','8月','8月','8月'], [1,2,3,4,1,2,3,4]] s = Series(data=data,index=index) DataFrame(s)
显示构造pd.MultiIndex
data = np.random.randint(0,100,size=(3,4)) columns = pd.MultiIndex.from_arrays([[1,1,2,2], ['red','blue','red','blue']]) df = DataFrame(data=data,columns=columns) df
data = np.random.randint(0,1000,size=(3,4)) columns = pd.MultiIndex.from_tuples([(1,'red'),(1,'blue'), (2,'red'),(2,'blue')]) df = DataFrame(data=data,columns=columns) df
data = np.random.randint(0,1000,size=(3,8)) columns = pd.MultiIndex.from_product([['7月','8月'], ['0#','90#','95#','97#']]) df = DataFrame(data=data,columns=columns) df
# 练习: 创建一个DataFrame,表示出张三李四期中期末各科成绩。
data = np.random.randint(0,100,size=(2,8)) index = ['张三','李四'] columns = pd.MultiIndex.from_product([['期中','期末'], ['python','java','c','php']]) df = DataFrame(data=data,index=index,columns=columns) df
多层索引对象的索引与切片操作
#Series的操作 data = np.random.randint(0,1000,size=8) index = [['7yue','7yue','7yue','7yue','8yue','8yue','8yue','8yue'], ['0#','90#','95#','97#','0#','90#','95#','97#']] s = Series(data=data,index=index) s
#对索引的访问 s.loc['7yue','0#'] s.loc['7yue']['0#'] #切片 s.loc['8yue']['0#':'95#'] #使用隐式索引进行切片,可以忽略多级索引 s.iloc[2:7]
#DataFrame的操作 df df['期中'] df.loc['张三'] df.loc['张三'].loc['期末','c'] df.iloc[1][1] df.iloc[1,0] #切片 df.loc['李四']['期中']['python':'php'] df.iloc[0:2]#Series索引
#显式 [indexname].loc[indexname]
# [[indexname1,indexname2]].loc[[indexname1,indexname2]]
#隐式 .iloc[locindex] --> 数字
# .iloc[[locindex1,locindex2]]
#Series切片
# 显式 [index1:index2]
# .loc[index1:index2]
# 隐式 .iloc[locindex1:locindex2]
#DataFrame索引
#显式
# 行索引:df.loc[indexname]
# 列索引:df[colunmsname]
# df.columnsname
# 元素索引:df.loc[indexname,columnsname]
# 隐式
# 行索引:df.iloc[locindex]
# 列索引:df.iloc[:, loccolumns]
# 元素索引:df.iloc[locindex,loccolumns]
索引的堆(stack)
#stack: 把列索引转化成行索引 #unstack: 把行索引转化成列索引
df.stack(level=0).unstack(level=0).stack(level=0)
#练习 #使用unstack()函数将df变成两行,分别为期中和期末 #使用unstack()函数将df变为四行,分别为四个科目
data = np.random.randint(0,150,size=(3,8)) columns = pd.MultiIndex.from_product([['期中','期末'], ['量子力学','达尔文进化论','相对论','虫洞深入讨论']]) index = ['小明','小白','小黄'] df = DataFrame(data=data,index=index,columns=columns) df
df1 = df.stack(level=0).unstack(level=0) df1
df.stack(level=1).unstack(level=0)
聚合操作
#求和 df.sum(axis=1)
#平均值 df.mean(axis=1)
df.stack(level=0).unstack(level=0).stack(level=1).mean(axis=1)
df.stack(level=0).unstack(level=0).mean(axis=1)
df.mean(axis=0) #所谓的聚合操作: 求和,平均值,方差,最大值,最小值,...