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

如何筛选Pandas多级索引DataFrame中各年份对应的最大月份数据

解决多级索引DataFrame按年取最大月份数据的问题

针对你这个已排序的多级索引(Year, Month)DataFrame,要自动获取每个年份对应的最大月份(也就是每个年份的最后一条记录)数据,有几个简洁且非硬编码的方法,下面一一说明:

方法1:利用groupby + tail(1)(最简洁,适配已排序索引)

因为你的索引已经按Year和Month完成排序,每个年份的最后一条记录就是对应最大月份的数据,直接按Year分组后取每组的最后一行即可:

result = df.groupby(level='Year').tail(1)

这个方法效率很高,tail(1)会直接定位到每个分组的最后一条数据,完全不需要手动指定月份值。

方法2:利用groupby + idxmax(通用型,适配未排序索引)

如果你的索引没有提前排序,或者想明确获取每个年份中Month最大的那条数据,可以先通过idxmax找到每个年份对应最大Month的索引,再用loc选取:

# 获取每个年份下Month最大的行索引
max_month_indices = df.groupby(level='Year')['Month'].idxmax()
# 根据索引筛选数据
result = df.loc[max_month_indices]

这个方法不受索引排序状态影响,适用性更广。

为什么iloc直接用会报错?

你尝试的df.iloc[(slice(None), -1),:]报错是因为iloc是基于位置的一维索引,无法直接对应多级索引的层级结构。如果一定要用iloc,可以结合groupby和apply来逐组处理:

result = df.groupby(level='Year').apply(lambda group: group.iloc[-1])

不过这种方法的效率不如前两种,因为apply会逐组执行lambda函数,数据量大时会稍慢。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 12:37:39