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

Pandas/Python如何按列分组取每组最新值生成新DataFrame

最简实现方案

你这个需求是非常典型的「按指定列分组,保留每组最后一条顺序记录」场景,用pandas内置的drop_duplicates方法实现最简洁,性能也最好,学生成绩、日志状态提取两类场景完全通用,不需要写自定义循环或者复杂分组逻辑。

  • 处理已加载的成绩DataFrame
    你的数据本身已经按成绩产生顺序排列,直接传对应参数即可:

    # subset传分组依据的列,keep='last'指定保留同组最后出现的记录
    result_df = raw_df.drop_duplicates(subset='Name', keep='last').reset_index(drop=True)
    

    运行后返回的结果里,John对应最后一条82分,Sara对应最后一条69分,完全符合预期。

  • 处理logs.csv类日志文件提取最终status
    逻辑完全一致,只需要替换分组列名即可,读文件后直接链式调用处理:

    import pandas as pd
    # 按ID分组保留最后一条,得到每个ID对应的最终status
    final_log_df = pd.read_csv('logs.csv').drop_duplicates(subset='ID', keep='last').reset_index(drop=True)
    

补充注意:如果你的原始数据没有按事件发生顺序排列,只需要先按时间戳/自增ID这类顺序字段排完序,再调用上面的去重逻辑即可,示例:

# 假设create_time是记录生成时间列,先排序再取最终值
result_df = raw_df.sort_values(by='create_time').drop_duplicates(subset='分组列名', keep='last').reset_index(drop=True)

不推荐用groupby('Name').tail(1)的写法,该方法没有做去重专项优化,数据量超过10万行的时候速度会比drop_duplicates慢30%以上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:57:26