pandas multi index select:如何选择数据帧的子集?

时间:2016-10-29 07:24:21

标签: python list pandas indexing multi-index

我创建了一个名为key_mat的多索引DataFrame。它只是喜欢

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

我想使用.loc

选择key_mat的子集
>>> key_mat.loc[['0002']] 
>>>
                   cnt
keys    minutes 
0002    19:08:00    2
        16:07:00    1

现在,我有一个keys key_list = ['0000','0001','0004'...]列表和一个minutes minutes_list = ['19:08:00','20:07:00',...]列表。我想选择cnt列{{1} } keys中的key_listminutes中的minutes_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 个答案:

答案 0 :(得分:1)

您需要slicers,但需要sort_index,因为错误:

  

KeyError:' MultiIndex Slicing要求索引完全是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