定位多索引的一级

时间:2019-05-28 11:11:23

标签: 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-slice切片。 IE:检索peoplematt mikedave的所有行。

As far as I can tell,但是,熊猫根本不支持。看到了一些与总水平相关的骇客,但它们甚至都没有用。 get_level_values(0)没有给出不同的级别值,并且levels()返回未排序的frozenset

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

3 个答案:

答案 0 :(得分:1)

您在这里:

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

答案 1 :(得分:0)

一个想法是获取第一级的第一个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')

答案 2 :(得分:0)

另一个选择:

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