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

如何用Pandas按平均得分降序将category列值展示在deviceType列下

解决方案(基于Pandas)

步骤1:计算各设备-分类的平均得分

先算出每个deviceType下各category的平均得分,这是后续排序的核心依据:

import pandas as pd

# 加载原始数据(示例数据与你的数据集一致)
df = pd.DataFrame({
    'deviceType': ['A', 'A', 'B', 'A'],
    'category': ['soccer', 'baseball', 'basketball', 'soccer'],
    'date': ['07012022', '07012022', '07012022', '07022022'],
    'score': [10, 8, 9, 9]
})

# 分组计算平均得分
mean_df = df.groupby(['deviceType', 'category'])['score'].mean().reset_index()

步骤2:按平均得分对每个设备的分类排序

按deviceType分组,对每组内的category按平均得分降序排列,得到每个设备对应的有序分类列表:

# 生成每个设备对应的排序后分类字典
sorted_category_dict = mean_df.groupby('deviceType').apply(
    lambda g: g.sort_values('score', ascending=False)['category'].tolist()
).to_dict()

步骤3:构造目标格式的表格

根据上面的字典生成目标结构的DataFrame,不足的行用空字符串填充:

# 确定需要的最大行数(取最长的分类列表长度)
max_row_count = max(len(cats) for cats in sorted_category_dict.values())

# 构建结果表
result_df = pd.DataFrame({
    'category': [''] * max_row_count,  # 第一列保持空值
    **{dev: pd.Series(cats + ['']*(max_row_count - len(cats))) 
       for dev, cats in sorted_category_dict.items()}
})

# 查看最终结果
print(result_df)

运行后得到的结果完全匹配你要的格式:

categoryAB
soccerbasketball
baseball

补充说明

你之前直接用groupby没达到效果,是因为groupby只完成了分组计算,但没处理按得分排序后将分类映射到对应设备列的逻辑。上面的步骤先完成排序,再通过字典映射构造宽表,刚好解决了这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:10:32