import numpy as np
import pandas as pd
from pandas import Series,DateFrame
dd=DataFrame(np.random.rand(4,2),columns=['data1','data2'],index=[['a','a','b','b'],['1','2','1','2']])
dd
from_tuples()
population=[1233443,3322324,134566,57568768,13324234,5467577]
index=[('California',2000),('California',2010),('NewYork',2000),('NewYork',2010),('Texas',2000),('Texas',2010)]
Mindex=pd.MultiIndex.from_tuples(index)
pop=DataFrame(population,index=Mindex)
pop
from_product()
MIndex=pd.MultiIndex.from_product([['california','NewYork','Texas'],[2000,2010]])
pop2=DataFrame(population,index=MIndex)
pop2
3. 多层索引对象的索引与切片操作
1)Series的操作
【重要】对于Series来说,直接中括号[]与使用.loc()完全一样,因此,推荐使用中括号索引和切片。
1))索引
pop['california']
2))切片
pop['california':'NewYork']
California 2000 33871648
2010 37253956
New York 2000 18976457
2010 19378102
dtype: int64
pop['california':,2000]
California 33871648
New York 18976457
Texas 20851820
dtype: int64
(2) 使用行索引需要用ix(),loc()等函数
pop.loc['California']
0
2000 1233443
2010 3322324
(3)使用pd.IndexSlice
【极其重要】最好的方法是:pd.IndexSlice+.loc()方法
行索引:
idx=pd.IndexSlice
pop.loc[idx['California'],idx[:]]
0
2000 1233443
2010 3322324
列索引:
idx=pd.indexSlice
pop.loc[idx[:2000],idx[:]]
4. 索引的堆(stack)
stack()
unstack() #【小技巧】使用unstack()的时候,level等于哪一个,哪一个就消失,出现在列里。
ddd=pd.DataFrame(np.random.rand(4,4),
columns=['0','1','2','3'],
index=['1','2','3','4'])
ddd
ddd.stack().unstack(level=0)
5. 聚合操作
【注意】
需要指定level
【小技巧】和unstack()相反,聚合的时候,level等于哪一个,哪一个就保留。
ddd1=ddd.stack()
ddd1
1 0 0.259452
1 0.410411
2 0.324261
3 0.506320
2 0 0.556484
1 0.674575
2 0.457297
3 0.145511
3 0 0.088966
1 0.402123
2 0.420650
3 0.481422
4 0 0.532261
1 0.812724
2 0.468918
3 0.170312
dtype: float64
ddd1.mean(level=0)
1 0.375111
2 0.458467
3 0.348290
4 0.496054
dtype: float64