如何对Pandas DataFrame按名称去重并保留各名称对应最大值行
Pandas按Name分组取Value最大值的实现方案
下面提供两种生产环境常用的实现方式:
方案1:groupby 原生聚合写法
这是处理这类分组取最值需求的标准实现,逻辑严谨性能最优,代码非常简洁:
df_filtered = df.groupby('Name', as_index=False)['Value'].max()
参数as_index=False的作用是避免将分组键Name转为索引,保留为DataFrame的普通列,输出结构和你给出的预期结果完全一致。
方案2:排序后去重(更直观)
更符合逐行处理的直觉逻辑,不需要理解聚合逻辑也能快速实现:
# 先按Value降序排序,每个Name的最大值行排在最前,去重时保留第一条即可 df_filtered = df.sort_values('Value', ascending=False).drop_duplicates('Name', keep='first') # 如果需要保留原始Name的出现顺序,可在末尾加上.sort_index()
如果你的DataFrame还有除了Name和Value之外的其他字段,方案2可以完整保留最大值对应的整行所有字段内容,适配性更强。
内容的提问来源于stack exchange,提问作者Johan Tuls
相关产品推荐
相关产品推荐

