首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅对多索引中的第二个索引使用.loc

仅对多索引中的第二个索引使用.loc
EN

Stack Overflow用户
提问于 2018-05-18 22:50:48
回答 3查看 12.8K关注 0票数 20

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

代码语言:javascript
复制
                value
year    name                
1921    Ah      40     
1921    Ai      90      
1922    Ah      100     
1922    Ai      7

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-18 22:53:35

我会在多级索引的第一级使用.xs (注意:level=1指的是“第二级”索引(name),因为Python零索引:在您的例子中,级别0是year ):

代码语言:javascript
复制
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
票数 16
EN

Stack Overflow用户

发布于 2018-05-18 22:54:34

@sacul有最常用的答案,但这里有一些替代方案。

MultiIndex.get_level_values

代码语言:javascript
复制
df[df.index.get_level_values('name') == 'Ai']

           value
year name       
1921 Ai       90
1922 Ai        7

DataFrame.query

代码语言:javascript
复制
df.query('name == "Ai"')

           value
year name       
1921 Ai       90
1922 Ai        7

使用pd.IndexSliceDataFrame.loc(axis=0)

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

代码语言:javascript
复制
df.loc(axis=0)[pd.IndexSlice[:, 'Ai']]

           value
year name       
1921 Ai       90
1922 Ai        7
票数 26
EN

Stack Overflow用户

发布于 2018-05-18 22:57:30

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

代码语言:javascript
复制
In [245]: df.loc[(slice(None), 'Ai'), :]
     ...: 
Out[245]: 
           value
year name       
1921 Ai       90
1922 Ai        7
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50413993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档