pandas层次化索引

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

你可能感兴趣的:(数据分析处理)