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

Pandas按user_id分组后获取每组购买次数最高的product_id及对应值方法

实现方案

你可以通过以下两种常用的pandas方法实现需求,默认你的原始数据集已读入为df,且包含user_id、product_id、uxp_total_bought三个字段:

方法1:排序后去重(逻辑直观,适合中小数据集)

import pandas as pd

# 按user_id升序、购买次数降序排序,同一user_id下购买次数最高的行排在最前
df_sorted = df.sort_values(by=['user_id', 'uxp_total_bought'], ascending=[True, False])
# 每个user_id仅保留第一行,提取指定的三列
result = df_sorted.drop_duplicates(subset='user_id', keep='first')[['user_id', 'product_id', 'uxp_total_bought']]
# 重置索引便于后续使用
result = result.reset_index(drop=True)

方法2:分组取最大值索引(运算效率更高,适合大数据集)

# 提取每个user_id分组下购买次数最大值对应的行索引
max_buy_idx = df.groupby('user_id')['uxp_total_bought'].idxmax()
# 按索引取对应行,筛选指定列
result = df.loc[max_buy_idx, ['user_id', 'product_id', 'uxp_total_bought']].reset_index(drop=True)

特殊场景处理:保留并列最高购买次数的所有产品

如果同一个user_id有多个产品购买次数同为最大值,需要全部保留的话可以用以下逻辑:

# 为每行新增对应user_id分组的最高购买次数标识
df['group_max_buy'] = df.groupby('user_id')['uxp_total_bought'].transform('max')
# 筛选出购买次数等于分组最大值的行
result = df[df['uxp_total_bought'] == df['group_max_buy']][['user_id', 'product_id', 'uxp_total_bought']].reset_index(drop=True)

内容的提问来源于stack exchange,提问作者Dimitris Tagkoulis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 04:45:03