pandas20 層次化索引與切片- 選擇(tcy)
阿新 • • 發佈:2018-12-15
層次化索引選擇 2018/12/15
1.總結:以2個層次標籤為例說明
obj[(label,label)]/obj.loc[(label,label)] #label為單個標籤,標籤切片,標籤列表;注1 obj[(loc,loc)]/obj.iloc[(loc,loc)] #loc為int,int切片; 注1 obj[bool_vec] #bool陣列選擇 s.a1.b1 #注2 df.C1.D1 s.get(label) #label為最外層標籤,為單標籤或標籤列表 df.get(label) #label為最外層列標籤,為單標籤或標籤列表 注1:有幾層就有幾個引數,從前向後依次為第一層,第二層,... 注2:從最外層依次向內取,有幾層就有幾個'.'
2.例項:序列
iterables = [['a1', 'a2', 'a3'], ['b1', 'b2','b3']] index=pd.MultiIndex.from_product(iterables2, names=['N1', 'N2']) s = pd.Series(np.arange(9), index=index2) s['a1'] , s.loc['a1'] #選擇第1,2,3行資料 s['a1':'a2'] #選擇第1...6行資料 s[['a1','a2']] #選擇第1...6行資料 s[('a1','b1'):('a1','b1')]#0 s[('a1','b1'):('a1','b2')]#選擇第1,2行資料 s[2],s.iloc[2] #2 s[2:5] #2,3,4#選擇第3,4,5行資料 s[s<3] , s.loc[s<3] #選擇第1,2,3行資料 s.a1 #選擇第1,2,3行資料 s.a1.b1 #0 s.get('[a1','a2']) #選擇第1...6行資料 s[:,'b1'] #0,3,6
# 層次化索引在資料重塑和基於分組的操作(如透視表生成)中扮演重要角色。
(s.unstack().stack()==s).all()#True
s.unstack()
# b1 b2 b3
# a1 0 1 2
# a2 3 4 5
# a3 6 7 8
3.資料幀:
iter_rows = [['a1', 'a2', 'a3'], ['b1', 'b2','b3']] iter_columns = [['C1', 'C2', 'C3'], ['D1', 'D2','D3']] index_row=pd.MultiIndex.from_product(iter_rows, names=['RN1', 'RN2']) index_col =pd.MultiIndex.from_product(iter_columns, names=['CN1', 'CN2']) df = pd.DataFrame(np.arange(81).reshape((9,9)), index=index_row, columns=index_col) # CN1 C1 C2 C3 # CN2 D1 D2 D3 D1 D2 D3 D1 D2 D3 # RN1 RN2 # a1 b1 0 1 2 3 4 5 6 7 8 # b2 9 10 11 12 13 14 15 16 17 # b3 18 19 20 21 22 23 24 25 26 # a2 b1 27 28 29 30 31 32 33 34 35 # b2 36 37 38 39 40 41 42 43 44 # b3 45 46 47 48 49 50 51 52 53 # a3 b1 54 55 56 57 58 59 60 61 62 # b2 63 64 65 66 67 68 69 70 71 # b3 72 73 74 75 76 77 78 79 80
例項1:
df[0:2] #選取第1,2行
df['a2':'a2'] #選取(a2,b1- b3) 3行
df[('a2','b1'):('a2','b1')] #選取(a2,b1) 1行
df[('a2','b1'):('a2','b2')] #選取(a2,b1) , (a2,b2) 2行
df[('C2','D1')] #選取(C2,D1) 1列
df[[('C2','D1'),('C2','D2')]] #選取(C2,D1),(C2,D2) 2列
df[('a2','b3'):('a3','b2')][[('C2','D1'),('C3','D2')]]#選取行列
# CN1 C2 C3
# CN2 D1 D2
# RN1 RN2
# a2 b3 48 52
# a3 b1 57 61
# b2 66 70
例項2:
df.loc['a2'] #選取(a2,b1- b3) 3行
df.loc[('a2','b1')] #選取(a2,b1) 1行
df.loc[[('a2','b1'),('a2','b2')]] #選取(a2,b1) , (a2,b2) 2行
df.loc[:,'C2'] #選取(C2,D1-D3) 3列
df.loc[:,[('C2','D1'),('C2','D2')]]#選取(C2,D1-D2) 2列
df.loc[:,('C2','D1')] #選取(C2,D1) 1列
df.loc[('a1','b1'),('C2','D1')] #選取行列 =3
df.loc[[('a1','b1'),('a1','b2')],('C2','D1')]#選取行列
# RN1 RN2
# a1 b1 3
# b2 12
# Name: (C2, D1), dtype: int32
例項3:
df.iloc[1] #選取(a1,b2) 1行
df.iloc[[1,2]] #選取(a1,b2-b3) 2行
df.iloc[:,1] #選取(C1,D2) 1列
df.iloc[:,[1,2]] #選取(C1,D2-D3) 2列
df.iloc[[1,2],[1,2]]#選取行列
# CN1 C1
# CN2 D2 D3
# RN1 RN2
# a1 b2 10 11
# b3 19 20
例項4:
df.iat[1,2] #選取第2行第3列數值=11
df.C1.D1 #選取第一列
df.get(('C1','D1'))#選取第一列
df.get('C1') #選取第1,2,3列