按MultiIndex数据帧中的特定索引级别过滤行

时间:2017-10-24 00:37:24

标签: python pandas multi-index

给定一个multIndex数据帧:

mux = pd.MultiIndex.from_arrays([
    list('aaaabbbbbccdddddd'),
    list('tuvwlmnopxyfghijk')
], names=['one', 'two'])

df = pd.DataFrame({'col': np.arange(len(mux))}, mux)

df

         col
one two     
a   t      0
    u      1
    v      2
    w      3
b   l      4
    m      5
    n      6
    o      7
    p      8
c   x      9
    y     10
d   f     11
    g     12
    h     13
    i     14
    j     15
    k     16

是否可以保持对应于数据帧第0级第i个值的行?

对于i = 2,我的预期输出为:

         col
one two     
a   t      0
    u      1
    v      2
    w      3
b   l      4
    m      5
    n      6
    o      7
    p      8

请注意,只保留与a和b相关的行,其他所有行都将被删除。我希望问题很清楚,但如果不是,请随时要求澄清。

我试过了:

idx = pd.IndexSlice
df.iloc[(idx[:2], slice(None))]

但是这只给出了整个df中的前两行,而不是第0级中前两个值的所有行。

1 个答案:

答案 0 :(得分:1)

解决此问题的一种方法是返回第0级的索引值,然后使用以下内容索引到原始数据框中:

df.loc[df.index.levels[0][:2].values]

         col
one two     
a   t      0
    u      1
    v      2
    w      3
b   l      4
    m      5
    n      6
    o      7
    p      8

正如评论中所提到的,这仅适用于第0级而不是第1级。可能有一个更普遍的解决方案可以与其他级别一起使用。