【问题标题】:How to select rows from a pandas DataFrame by specifying only the n-th index level?如何通过仅指定第 n 个索引级别从 pandas DataFrame 中选择行?
【发布时间】:2022-06-20 06:47:44
【问题描述】:

我有一个带有多级行索引的 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 来选择带有 .loc 的行:

df.loc[("Boston", )]

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

df.query("Year == 2020")

现在我想知道如何使用.loc 来实现这一点?

【问题讨论】:

  • df.loc(axis=0)[:, 2020]
  • 谢谢!现在我有点疑惑为什么 loc 在我查询级别 0 时不需要轴...
  • 我认为另一个选择是df.loc[[:, '2020'], :]。我认为对于 0 级,不要求轴只是方便(假设)

标签: pandas select multi-index pandas-loc


【解决方案1】:

根据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

【讨论】:

  • 虽然我对 sammywemmys 的回答非常满意,但这让我实际上回到了文档,我理解了切片示例的工作原理。太棒了!
猜你喜欢
  • 2019-01-26
  • 2020-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-01
  • 2021-06-18
  • 2018-07-08
  • 1970-01-01
相关资源
最近更新 更多