2016-10-29 140 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