Pandas双级索引DataFrame提取每个ID分组对应第二级索引最后一行
问题解决方案
核心逻辑:按双索引的第一级ID分组,取每个分组的最后一行即可,无需手动处理不同分组的长度差异。
前置操作(必做)
首先确保你的DataFrame索引是按ID升序、同ID下MONTH_ID升序排列的,保证最后一行是该ID对应的最大月份数据:
df = df.sort_index(level=["ID", "MONTH_ID"], ascending=[True, True])
可行实现方案
方案1:groupby + tail(1)(推荐,通用场景)
直接按第一级索引ID分组,调用tail(1)取每个分组的最后1行,自动适配不同分组的长度:
result = df.groupby(level="ID").tail(1)
方案2:groupby + last()(适用需过滤空值的场景)
如果分组内存在带空值的行,需要取最后一个所有字段都非空的行,可以使用该方法:
result = df.groupby(level="ID").last()
常见问题说明
你之前使用nth(-1)未达到预期,通常是因为分组时错误将ID和MONTH_ID都作为了分组键,导致每个分组仅包含1行数据,nth(-1)返回了全量数据。只需指定分组仅针对第一级ID索引即可解决该问题。
内容的提问来源于stack exchange,提问作者George Farah
相关产品推荐
相关产品推荐

