Python iloc&x27;对多索引的一个级别进行排序

Python iloc&x27;对多索引的一个级别进行排序,python,pandas,Python,Pandas,我有多索引数据帧,类似于: df = pd.DataFrame(index = pd.MultiIndex.from_product([['mike', 'matt', 'dave', 'frank', 'larry'], range(10)])) df['foo']="bar" df.index.names=['people', 'socket'] 我想做的是iloc切片与索引中前三个人相关联的所有行。IE:检索people为mattmike或dave的所有行 然而,熊猫根本不支持这一点。看

我有多索引数据帧,类似于:

df = pd.DataFrame(index = pd.MultiIndex.from_product([['mike', 'matt', 'dave', 'frank', 'larry'], range(10)]))
df['foo']="bar"
df.index.names=['people', 'socket']
我想做的是iloc切片与索引中前三个人相关联的所有行。IE:检索
people
matt
mike
dave
的所有行

然而,熊猫根本不支持这一点。看到了一些与粗略级别相关的黑客,但它们甚至都不起作用
get\u level\u value(0)
不提供不同的级别值,
levels()
返回未排序的
frozenset


编辑:我应该说基于
.loc
的解决方案对我不起作用。

一个想法是获取第一级的第一个uniqe值,通过
loc
索引和选择:

df = df.loc[df.index.get_level_values(0).unique()[:3]]
详细信息

print (df.index.get_level_values(0).unique()[:3])
Index(['mike', 'matt', 'dave'], dtype='object', name='people')
给你:

df = pd.DataFrame(index = pd.MultiIndex.from_product([['mike', 'matt', 'dave', 'frank', 'larry'], range(10)], names=['people', 'socket']))
df['foo']="bar"
df.index.names=['people', 'socket']
# get rows
select_rows = df.loc[['mike', 'matt', 'dave']]
输出:

people socket     
mike   0       bar
       1       bar
       2       bar
       3       bar
       4       bar
       5       bar
       6       bar
       7       bar
       8       bar
       9       bar
matt   0       bar
       1       bar
       2       bar
       3       bar
       4       bar
       5       bar
       6       bar
       7       bar
       8       bar
       9       bar
dave   0       bar
       1       bar
       2       bar
       3       bar
       4       bar
       5       bar
       6       bar
       7       bar
       8       bar
       9       bar
另一种选择:

df[df.index.get_level_values(0)
     .isin({'matt','mike','dave'})]