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