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

如何使用Pandas保留DataFrame中按最新版本分组的记录

问题描述

给定如下Pandas DataFrame:

Id     b_num    b_type     b_ver   price
100    55        A          0       100
101    55        A          0        50    
102    55        A          1       100
103    55        A          1        60 
104    30        C          2       100
105    30        C          2        50    
106    30        C          2       100
107    30        C          2        60
108    30        C          4       200
109    30        C          4        55    
110    30        C          4        80
111    30        C          4       120
112    30        C          4        20

需求:按b_num和b_type分组,保留每组中b_ver(版本号)最新的所有记录,期望输出如下:

Id     b_num    b_type     b_ver   price
102    55        A          1       100
103    55        A          1        60 
108    30        C          4       200
109    30        C          4        55    
110    30        C          4        80
111    30        C          4       120
112    30        C          4        20
解决方案

方法一:分组取最大版本后合并筛选

  1. 按b_num和b_type分组,提取每组的最大b_ver值:
max_ver_df = df.groupby(['b_num', 'b_type'])['b_ver'].max().reset_index()
  1. 将原DataFrame与上述结果合并,筛选出匹配的记录:
result = df.merge(max_ver_df, on=['b_num', 'b_type', 'b_ver'])

方法二:使用transform直接筛选(更高效)

通过transform方法在原DataFrame中生成每组的最大版本号,直接过滤出符合条件的行:

# 生成每组的最大版本号掩码
mask = df['b_ver'] == df.groupby(['b_num', 'b_type'])['b_ver'].transform('max')
# 筛选出目标记录
result = df[mask]

两种方法均能得到预期结果,方法二无需额外合并操作,执行效率更高。

内容的提问来源于stack exchange,提问作者Julio Moyano Basso

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:31:02