2016-10-29 63 views
1

我已經創建了多指數數據框名爲key_mat.It只是喜歡pandas多索引選擇:如何選擇數據幀的子集?

    cnt 
keys minutes 
0000 21:01:00 1 
0002 19:08:00 2 
     16:07:00 1 

我想用.loc

>>> key_mat.loc[['0002']] 
>>> 
        cnt 
keys minutes 
0002 19:08:00 2 
     16:07:00 1 

我們選擇key_mat的一個子集,我有keyskey_list = ['0000','0001','0004'...]和列表列表minutesminutes_list = ['19:08:00','20:07:00',...]。我想選擇cnt列,其中keyskey_listminutesminutes_list。我嘗試使用.loc,但我只找到key_mat.loc[[('0000','21:01:00'),('0002','19:08:00')]]['cnt']的方式。但這不能滿足我的需求。我找到了一種方法來使用querykey_mat.query('keys in {key_list} and minutes in {minutes_list}'.format(key_list = key_list, minutes_list =minutes_list))。有沒有辦法使用.loc.ix來完成我的任務?

回答

1

你需要slicers,但首先sort_index,因爲錯誤:

KeyError: 'MultiIndex Slicing requires the index to be fully lexsorted tuple len (2), lexsort depth (1)'

key_list = ['0000','0001','0004'] 
minutes_list = ['19:08:00','21:01:00'] 

df.sort_index(inplace=True) 

idx = pd.IndexSlice 
print (df.loc[idx[key_list,minutes_list],:]) 
       cnt 
keys minutes  
0000 21:01:00 1 
+0

THX。它的工作原理,我會研究這些方法。 –

+0

很高興能幫到你!美好的一天! – jezrael