如何使用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
解决方案
方法一:分组取最大版本后合并筛选
- 按
b_num和b_type分组,提取每组的最大b_ver值:
max_ver_df = df.groupby(['b_num', 'b_type'])['b_ver'].max().reset_index()
- 将原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
相关产品推荐
相关产品推荐

