按 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 级前两个值的 所有 行。
解决此问题的一种方法是 return 第 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 级。可能会有一个更通用的解决方案,适用于其他级别。
给定一个 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 级前两个值的 所有 行。
解决此问题的一种方法是 return 第 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 级。可能会有一个更通用的解决方案,适用于其他级别。