簡體   English   中英

按MultiIndex數據幀中的特定索引級別過濾行

[英]Filtering rows by a particular index level in a MultiIndex dataframe

給定一個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級中前兩個值的所有行。

解決此問題的一種方法是返回第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級。 可能有一個更普遍的解決方案可以與其他級別一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM