查找MultiIndex DataFrame中条目数最少的L1与L2索引对
针对多级索引分组统计最小条目组合的Pandas优雅方案
Pandas原生支持直接对多级索引的级别做分组聚合,不需要遍历索引,也不需要把索引转成普通列,几行代码即可实现需求:
核心实现步骤
- 按L1、L2两级索引分组,统计每个组合的条目数
groupby方法的level参数可以直接指定要分组的索引名/索引位置,不需要操作数据列:
# 按索引名指定分组级别,适配索引有命名的场景 pair_counts = df.groupby(level=["L1", "L2"]).size() # 若索引没有命名,也可以按索引的位置顺序传参,此处0对应L1,1对应L2 # pair_counts = df.groupby(level=[0, 1]).size()
返回的pair_counts是带有(L1, L2)两级索引的Series,值就是对应组合的条目数量,你给出的示例运行后结果如下:
L1 L2 A a 2 b 1 B a 3 C a 2 c 2 dtype: int64
- 提取条目数最少的组合
- 若只需要取第一个出现的最小条目组合:
min_pair = pair_counts.idxmin() # 示例返回结果:('A', 'b')
- 若存在多个组合条目数同为最小值,要提取所有符合要求的组合:
all_min_pairs = pair_counts[pair_counts == pair_counts.min()].index.tolist()
该方案全程使用Pandas原生API实现,无需遍历索引、无需修改原表结构,性能远高于循环统计的实现方式,完全符合Pandas的代码风格。
内容的提问来源于stack exchange,提问作者Goodman
相关产品推荐
相关产品推荐

