在multiindex上的第二个索引上使用.loc

时间:2018-05-18 14:50:48

标签: python pandas

我有多索引数据框,如下所示:

                value
year    name                
1921    Ah      40     
1921    Ai      90      
1922    Ah      100     
1922    Ai      7

其中yearname是索引。我想选择名称Ai出现的每一行。我尝试了df.loc[(:,'Ai'}]df.loc['Ai'],但都给出了错误。如何仅使用名称列进行索引?

3 个答案:

答案 0 :(得分:5)

我会在你的多索引的第一级使用.xs(注意:level=1引用"第二"索引(name)因为python&#39 ; s零索引:在您的情况下,级别0为year

df.xs('Ai', level=1, drop_level=False)
# or
df.xs('Ai', level='name', drop_level=False)

           value
year name       
1921 Ai       90
1922 Ai        7

答案 1 :(得分:4)

@sacul有最惯用的答案,但这里有一些选择。

MultiIndex.get_level_values

df[df.index.get_level_values('name') == 'Ai']

           value
year name       
1921 Ai       90
1922 Ai        7

DataFrame.query

df.query('name == "Ai"')

           value
year name       
1921 Ai       90
1922 Ai        7
带有DataFrame.loc(axis=0)

pd.IndexSlice

与@ liliscent的答案类似,但如果您指定:则不需要尾随axis=0

df.loc(axis=0)[pd.IndexSlice[:, 'Ai']]

           value
year name       
1921 Ai       90
1922 Ai        7

答案 2 :(得分:3)

如果您更喜欢loc,可以使用:

In [245]: df.loc[(slice(None), 'Ai'), :]
     ...: 
Out[245]: 
           value
year name       
1921 Ai       90
1922 Ai        7