pandas按客户分组取region最大值并保留整行数据的实现方法
解决方案
你之前的写法仅指定了聚合region列取最大值,因此返回结果只包含分组键和聚合后的region值,无法关联到原表的其他字段。可通过以下两种常用方法实现需求:
方法1:排序后去重(高效简洁)
先按客户、地区升序排序,同一客户下字符串取值更大的region会排在靠后位置,直接按客户字段去重保留最后一条记录即可:
# 按customer、region升序排序 df_sorted = df.sort_values(by=['customer', 'region']) # 按customer去重,保留最后一条(即region最大的记录) result = df_sorted.drop_duplicates(subset='customer', keep='last').reset_index(drop=True)
方法2:分组匹配最大值(逻辑直观)
先算出每个客户的最大region值,再通过双字段关联从原表匹配完整行:
# 计算每个客户的最大region,转为DataFrame格式 max_region_df = df.groupby('customer', sort=False)['region'].max().reset_index() # 用customer和region双字段匹配原表,拿到对应完整行 result = df.merge(max_region_df, on=['customer', 'region']).reset_index(drop=True)
两种方法运行后得到的result即为你需要的期望输出。
内容的提问来源于stack exchange,提问作者Mauro Del Nook
相关产品推荐
相关产品推荐

