import numpy as np
from pandas import Series,DataFrame
import pandas as pd
from numpy.random import randn
# 階層構造があるindexを作ることができます。
ser = Series(np.random.randn(6),index=[[1,1,1,2,2,2],['a','b','c','a','b','c']])
# どうなっているか見てみましょう。
ser
# indexだけ表示してみます。
ser.index
# これを利用できます。
ser[1]
ser[2]
ser
# We can also select from an internal index level
ser[:,'a']
# このSeriesをもとに、DataFrameを作れます。
dframe = ser.unstack()
dframe
# 逆もできます。
dframe.T.unstack()
# DataFrameにも階層的なindexを作れます。
dframe2 = DataFrame(np.arange(16).reshape(4,4),
index=[['a','a','b','b'],[1,2,1,2]],
columns=[['NY','NY','LA','SF'],['cold','hot','hot','cold']])
dframe2
#階層的なindexに名前を付けられます。
# 行方向の名前
dframe2.index.names = ['INDEX_1','INDEX_2']
# 列方向の名前
dframe2.columns.names = ['Cities','Temp']
dframe2
# 階層構造を逆にすることができます。今回は列方向で試します。
dframe2.swaplevel('Cities','Temp',axis=1)
#We can also sort levels
dframe2.sortlevel(1)
dframe2.sortlevel(1).sortlevel(0)
#レベルに応じて計算も出来ます。
dframe2.sum(level='Temp',axis=1)