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

如何获取MultiIndex DataFrame中每个一级分组下的最后一条二级索引行

解法汇总

你要的需求可以通过以下几种更高效的矢量化方法实现,完全不需要用iterrows遍历:

方法1:groupby.tail() (最推荐,写法最简单)

直接按一级索引thread_id分组,取每组的最后1行即可,默认会保留原始的多级索引结构:

import pandas as pd
result = df.groupby(level='thread_id').tail(1)

输出结果:

text
thread_id message_id_in_thread     
0         1                  txt1
1         2                  txt4
2         1                  txt6

方法2:pd.IndexSlice 匹配你想要的类切片写法

如果你偏好类似(:, -1)的索引写法,可以结合分组计数实现,更贴合你描述的语法思路:

idx = pd.IndexSlice
# 生成每组最后一行的掩码
last_row_mask = df.groupby(level=0).cumcount() == df.groupby(level=0).cumcount().max(level=0)
result = df[last_row_mask]

方法3:groupby.last()

如果不需要严格保留索引的生成逻辑,只是要取每组最后一行的数值,也可以用该方法:

result = df.groupby(level='thread_id').last()

注意:如果你的数据存在空值,last()会自动取每组最后一个非空值,和tail(1)取最后一行的逻辑有区别,无空值时二者结果一致。


内容的提问来源于stack exchange,提问作者Iván Sánchez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:36:02