求助:Pandas中按用户分组选取对应最高访问量的产品信息
解决方法:获取每个客户对应最高访问次数的完整记录
我完全懂你的困扰!你想要的是每个客户ID下,对应最高No_visits的那一行完整数据,而不是把product_code和No_visits各自的最大值单独提取出来——之前的groupby().max()确实会做后者,这就偏离了你的需求。
下面给你两种简单可靠的实现方法:
方法1:使用idxmax()定位目标行
idxmax()会返回每组中No_visits最大值对应的行索引,再通过loc提取完整行:
# 注意列名是No_visits(首字母大写,和你原DataFrame保持一致) result = df.loc[df.groupby('customer_id')['No_visits'].idxmax()] # 可选:重置索引让结果更整洁 result = result.reset_index(drop=True)
运行后就能得到你预期的结果:
| customer_id | product_code | No_visits |
|---|---|---|
| 1 | 100 | 45 |
| 2 | 50 | 60 |
方法2:排序后去重
先按客户ID升序、No_visits降序排序,这样每个客户的第一条记录就是访问次数最多的,再通过drop_duplicates保留每组第一条:
result = df.sort_values( by=['customer_id', 'No_visits'], ascending=[True, False] ).drop_duplicates(subset='customer_id').reset_index(drop=True)
这个方法逻辑直观,适合需要先查看排序后数据的场景。
小提醒
你之前的代码里写了no_visits(全小写),但原DataFrame的列名是No_visits(首字母大写),这种大小写不一致也会导致错误,记得保持列名统一哦!
内容的提问来源于stack exchange,提问作者Homesand
相关产品推荐
相关产品推荐

