如何通过仅指定第 n 个索引级别来从 pandas DataFrame 中获取 select 行?

How to select rows from a pandas DataFrame by specifying only the n-th index level?

我有一个具有多级行索引的 pandas DataFrame:

                 operators  license
                       sum      sum
City      Year
-----------------------------------       
New York  2020          44       A2
Chicago   2020          30       A2
Boston    2020          33       A1
New York  2021          48       A2
Chicago   2021          30       A2 
Boston    2021          41       A1

通过仅指定行索引的级别 0,我可以 select 具有 .loc 的行:

df.loc[("Boston", )]

但是如何在不指定级别 0 的情况下 select 所有级别 1 为 2020 的行? 经过一番搜索后,我发现 query 给出了我正在寻找的确切结果:

df.query("Year == 2020")

现在我想知道如何使用 .loc?

来实现这一点

根据Cross-section | MultiIndex / advanced indexing,可以使用

out = df.loc[(slice(None), 2020), :]

idx = pd.IndexSlice
out = df.loc[idx[:, 2020], :]

out = df.xs(2020, level='Year', drop_level=False)
out = df.xs(2020, level=1, drop_level=False)
print(out)

              operators license
                    sum     sum
City     Year
New York 2020        44      A2
Chicago  2020        30      A2
Boston   2020        33      A1