我有看起来像这样的多索引数据框:
value
year name
1921 Ah 40
1921 Ai 90
1922 Ah 100
1922 Ai 7
Run Code Online (Sandbox Code Playgroud)
其中year和name是索引。我想选择名称Ai出现的每一行。我已经尝试过df.loc[(:,'Ai')],df.loc['Ai']但是都给出了错误。如何仅使用名称列编制索引?
@sacul的回答最惯用,不过这里有一些替代方法。
MultiIndex.get_level_valuesdf[df.index.get_level_values('name') == 'Ai']
value
year name
1921 Ai 90
1922 Ai 7
Run Code Online (Sandbox Code Playgroud)
DataFrame.querydf.query('name == "Ai"')
value
year name
1921 Ai 90
1922 Ai 7
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我会.xs在您的multiindex的第一级上使用(注意:由于python的零索引,因此level=1引用了“第二”索引(name):year您的情况为0级):
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
Run Code Online (Sandbox Code Playgroud)
如果您愿意loc,可以使用:
In [245]: df.loc[(slice(None), 'Ai'), :]
...:
Out[245]:
value
year name
1921 Ai 90
1922 Ai 7
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3279 次 |
| 最近记录: |