【问题标题】:pandas multi index select: How to select subset of a dataframe?熊猫多索引选择:如何选择数据框的子集?
【发布时间】:2017-03-12 01:09:51
【问题描述】:

我创建了一个名为 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

现在,我有一个keyskey_list = ['0000','0001','0004'...] 列表和minutesminutes_list = ['19:08:00','20:07:00',...] 列表。我想选择cnt 列,其中keyskey_listminutes 在@987654332 @。我尝试使用 .loc ,但我只是找到了 key_mat.loc[[('0000','21:01:00'),('0002','19:08:00')]]['cnt'] 的方式。但这不能满足我的需求。我找到了使用query ,key_mat.query('keys in {key_list} and minutes in {minutes_list}'.format(key_list = key_list, minutes_list =minutes_list)) 的方法。有没有办法使用.loc.ix 来完成我的任务?

【问题讨论】:

    标签: python list pandas indexing multi-index


    【解决方案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
    

    【讨论】:

    • 很高兴能帮到您!美好的一天!
    猜你喜欢
    • 2014-06-21
    • 2020-01-12
    • 2018-05-28
    • 2017-10-30
    • 2017-11-27
    • 2020-08-18
    • 2014-10-01
    • 2018-09-27
    • 2018-06-19
    相关资源
    最近更新 更多