我有多索引数据框,如下所示:
value
year name
1921 Ah 40
1921 Ai 90
1922 Ah 100
1922 Ai 7
其中year
和name
是索引。我想选择名称Ai
出现的每一行。我尝试了df.loc[(:,'Ai'}]
和df.loc['Ai']
,但都给出了错误。如何仅使用名称列进行索引?
答案 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