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

Pandas按user_id分组求product_id众数,平局取最新created_at对应值的实现方法

需求实现方案

前置处理

首先确保created_at列转换为datetime类型,方便后续时间比较:

import pandas as pd
df['created_at'] = pd.to_datetime(df['created_at'])

核心实现代码

# 按用户+商品聚合,统计每个商品的购买次数、对应最新下单时间
user_prod_stats = df.groupby(['user_id', 'product_id']).agg(
    buy_cnt = ('product_id', 'count'),
    latest_time = ('created_at', 'max')
).reset_index()

# 按购买次数降序、最新下单时间降序排序,取每个用户的第一条记录
result = user_prod_stats.sort_values(
    by = ['buy_cnt', 'latest_time'],
    ascending = [False, False]
).groupby('user_id', as_index=False).head(1)[['user_id', 'product_id']]

输出结果

运行代码后得到的结果完全符合要求:

user_idproduct_id
1200
2300
3400

方案优势

该方案使用pandas原生的聚合、排序操作,均为向量化实现,比在groupby中自定义lambda函数的性能高很多,数据量越大优势越明显;同时逻辑分层清晰,后续如果要调整排序规则(比如次数相同选最早下单的商品),只需要修改排序参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:06:06