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

不使用pandas/numpy等库 如何按genre分组计算平均销售额

纯Python实现按 genre 分组计算平均销售额的思路

前置假设

你从数据库读取到的原始数据为Python原生的列表套字典结构,这也是Python读取关系型数据最常用的原生返回格式,单条数据示例如下:

{"genre": "Action", "sales": 123.4, "其他字段": "xxx"}

如果是列表套元组等其他结构,修改对应字段的取值逻辑即可。


实现步骤

  • 第一步:初始化两个辅助字典,分别存储每个genre的累计销售额、累计记录数
  • 第二步:遍历全量数据,完成两个字典的数值累加:
    • 遇到未出现过的genre时,先给两个字典对应key初始化值为0
    • 累加当前记录的销售额到对应genre的总销售额字段
    • 对应genre的记录数+1
  • 第三步:遍历辅助字典,用单genre总销售额 / 单genre记录数计算得到对应平均销售额,生成结果字典
  • 可选优化:如果数据存在空销售额、零记录等异常情况,提前加过滤逻辑避免计算错误

代码示例

# 示例原始数据,可替换为你从数据库读取的实际数据
raw_data = [
    {"genre": "Action", "sales": 120.5},
    {"genre": "Adventure", "sales": 99.2},
    {"genre": "Action", "sales": 150.7},
    {"genre": "RPG", "sales": 210.3},
    {"genre": "Adventure", "sales": 85.6},
    {"genre": "RPG", "sales": 198.9}
]

# 初始化辅助字典
genre_total_sales = {}
genre_count = {}

# 遍历完成累加
for item in raw_data:
    current_genre = item["genre"]
    current_sales = item["sales"]
    # 新增分类初始化
    if current_genre not in genre_total_sales:
        genre_total_sales[current_genre] = 0
        genre_count[current_genre] = 0
    # 数值累加
    genre_total_sales[current_genre] += current_sales
    genre_count[current_genre] += 1

# 计算平均销售额
genre_avg_sales = {}
for genre in genre_total_sales:
    # 避免除零错误
    if genre_count[genre] > 0:
        # 保留2位小数,可按需修改精度
        genre_avg_sales[genre] = round(genre_total_sales[genre] / genre_count[genre], 2)

# 输出结果和pandas groupby的计算结果完全一致
print(genre_avg_sales)
# 示例输出:{'Action': 135.6, 'Adventure': 92.4, 'RPG': 204.6}

扩展说明

如果你的原始数据是从数据库cursor.fetchall()读取的列表套元组结构,只需要把取值逻辑换成下标取值即可,比如current_genre = item[1]、current_sales = item[3],对应你数据库表的字段顺序调整即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:54:03