我有多索引数据帧,如下所示:
value
year name
1921 Ah 40
1921 Ai 90
1922 Ah 100
1922 Ai 7其中year和name是索引。我要选择出现名称Ai的每一行。我尝试过df.loc[(:,'Ai')]和df.loc['Ai'],但两者都给出了错误。如何仅使用name列进行索引?
发布于 2018-05-18 22:53:35
我会在多级索引的第一级使用.xs (注意:level=1指的是“第二级”索引(name),因为Python零索引:在您的例子中,级别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发布于 2018-05-18 22:54:34
@sacul有最常用的答案,但这里有一些替代方案。
MultiIndex.get_level_values
df[df.index.get_level_values('name') == 'Ai']
value
year name
1921 Ai 90
1922 Ai 7DataFrame.query
df.query('name == "Ai"')
value
year name
1921 Ai 90
1922 Ai 7使用pd.IndexSlice的DataFrame.loc(axis=0)
与@liliscent的答案类似,但如果指定axis=0,则不需要尾随的:。
df.loc(axis=0)[pd.IndexSlice[:, 'Ai']]
value
year name
1921 Ai 90
1922 Ai 7发布于 2018-05-18 22:57:30
如果您更喜欢loc,您可以使用:
In [245]: df.loc[(slice(None), 'Ai'), :]
...:
Out[245]:
value
year name
1921 Ai 90
1922 Ai 7https://stackoverflow.com/questions/50413993
复制相似问题