You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas中如何按层级筛选MultiIndex DataFrame的目标行

MultiIndex DataFrame 筛选一级索引下二级条目数大于1的行

样例数据复现

本地测试可先用以下代码构造题目给出的多层索引DataFrame:

import pandas as pd

df = pd.DataFrame(
    {"col": [5624, 1656, 265677, 3755, 47, 85544, 97656, 12774, 111, 9478]},
    index=pd.MultiIndex.from_tuples(
        [("a",1),("a",2),("a",3),("a",4),("b",5),("b",6),("c",7),("d",8),("e",9),("e",10)],
        names=["L1", "L2"]
    )
)

最简实现方法

直接按一级索引分组后用filter保留符合行数要求的分组,代码最简洁:

result = df.groupby(level="L1").filter(lambda group: len(group) > 1)

分步实现(方便自定义调整)

如果需要加更复杂的筛选规则,可以拆成两步写,逻辑更直观:

  1. 先统计每个L1分组下的条目数量,提取符合阈值要求的L1值
# 统计每个L1对应的行数量
l1_count = df.groupby(level="L1").size()
# 筛选出条目数大于1的L1值
valid_l1 = l1_count[l1_count > 1].index
  1. 匹配一级索引在有效列表内的所有行
result = df[df.index.get_level_values("L1").isin(valid_l1)]

结果验证

运行上述代码得到的输出和预期完全一致:

col
L1 L2          
a  1       5624
   2       1656
   3     265677
   4       3755
b  5         47
   6      85544
e  9        111
   10      9478

扩展说明

  • 若要按其他层级做分组统计,只要把level参数替换为对应层级的名称/位置序号即可,比如按第二层级L2分组可写level="L2"或level=1
  • 若需要调整筛选阈值,直接修改判断条件即可,比如要保留条目数≥3的分组,就把判断条件改为len(group) >=3

内容的提问来源于stack exchange,提问作者SwiftestKoala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 03:15:43