pandas层次化索引

创建多层行索引

#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)
#所谓的聚合操作: 求和,平均值,方差,最大值,最小值,...










猜你喜欢

转载自blog.csdn.net/qq_42034590/article/details/80762898