[英]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.