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

如何在DataFrame透视结果中获取高分Item的字符串值?

解决按userID分组提取对应最高分Item的问题

针对你的需求——按userID维度聚合,获取每个用户得分最高的Item,不能直接用常规的pivot聚合字符串(会取字典序最大值而非Score对应的Item),可以用以下几种方法实现:

方法一:排序去重法

先按userID分组内的Score降序排序,再保留每个userID的第一条记录(即得分最高的Item):

import pandas as pd

# 假设你的数据存储在df中
# 按userID升序、Score降序排序
df_sorted = df.sort_values(['userID', 'Score'], ascending=[True, False])
# 保留每个userID的首条记录,只保留需要的列
result = df_sorted.drop_duplicates(subset='userID')[['userID', 'Item']]
# 转成类似透视表的格式(userID为索引,Item为单独列)
result_pivot = result.set_index('userID').rename(columns={'Item': 'Top_Item'})

方法二:使用idxmax定位法

通过groupby找到每组中Score最大值对应的行索引,再提取对应Item:

# 获取每个userID分组中Score最大的行的索引
max_score_indices = df.groupby('userID')['Score'].idxmax()
# 根据索引提取目标行,整理成目标格式
result = df.loc[max_score_indices, ['userID', 'Item']].set_index('userID').rename(columns={'Item': 'Top_Item'})

处理多个Item同分的情况

如果同一个用户有多个Item得分相同且都是最高分,可以用自定义聚合函数把这些Item拼接起来:

def get_top_items(group):
    max_score = group['Score'].max()
    # 把所有最高分的Item用逗号拼接,也可以换成其他分隔符
    return ','.join(group[group['Score'] == max_score]['Item'])

# 分组聚合得到结果
result = df.groupby('userID').apply(get_top_items).reset_index(name='Top_Items')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:50:13