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

Python提取多级索引DataFrame各一级分类下二级索引Top值方法

Pandas多级索引分组取首位二级索引实现方案

你的需求核心是在已完成组内排序的多级索引DataFrame中,提取每个一级索引分组下第一行对应的二级索引值,不需要重复实现排序逻辑,以下两种方法可以直接复用:


方法1:分组取首项(代码最简洁,适合仅提取索引映射场景)

直接按一级索引做分组,取每个分组的第一行对应的二级索引值即可,注意加sort=False保留你原有的一级索引顺序,避免被pandas默认重排:

# 替换level=0为你实际的一级索引层级位置/索引名,level=1对应二级索引
top_gender_series = df.groupby(level=0, sort=False).apply(
    lambda group: group.index.get_level_values(level=1)[0]
)

运行得到的top_gender_series是一个Series结构:

  • 索引为所有一级分类值
  • 对应值为每个分类下排首位的二级索引值(即你要的M/F结果)
    可以直接用.to_dict()转成字典,或者.to_csv()导出直接用于报告撰写。

如果需要同时拿到Top条目对应的perc_viewed等其他字段值,直接用first()方法取首行即可:

# 结果包含每个一级分类下Top条目的所有字段值
top_detail_df = df.groupby(level=0, sort=False).first()

方法2:去重保留首行(适合多字段批量提取场景)

如果需要保留Top条目的全量字段做后续分析,用去重逻辑效率更高,不需要走分组计算:

# 先将多级索引转为普通列,按一级列去重保留第一条,再重新设为索引
top_detail_df = (
    df.reset_index()
      .drop_duplicates(subset="替换为你的一级索引列名", keep="first")
      .set_index("替换为你的一级索引列名")
)

这个方法得到的结果和groupby.first()完全一致,在数据量大于10万行的时候运行速度更快。


避坑提示:很多人踩过这个坑:调用groupby时如果没加sort=False,pandas会默认对一级索引做字典序重排,直接打乱你之前预设的一级分类顺序,写代码的时候一定要带上这个参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:54:16