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

如何用Pandas按拆分后的单个电影类型分组求平均评分?

按单个电影类型分组计算平均评分解决方案

嘿,我明白你现在的困境——2500万行的大数据量,而且genres是多值组合,直接分组肯定得不到每个单独类型的结果对吧?别担心,咱们只需要先把多值的genres拆成单独的行,再做分组统计就搞定了,而且要兼顾效率哦!

核心思路

因为每部电影可能对应多个类型,咱们需要把每个电影-类型组合拆成独立的行,这样就能用常规的分组方法计算单个类型的平均评分了。针对大数据量,用pandas的explode方法是最高效的选择之一。

具体代码步骤

  1. 拆分genres为列表格式
    先把用|分隔的字符串转换成列表,方便后续展开:

    df['genres'] = df['genres'].str.split('|')
    
  2. 展开多值列为单独行
    用explode把每个类型拆成单独的行,这一步会让每部电影对应它的每个类型生成一行数据:

    df_exploded = df.explode('genres')
    

    比如你给的示例数据,Pulp Fiction (1994)会被拆成4行,分别对应Comedy、Crime、Drama、Thriller。

  3. 分组计算平均评分
    现在就可以按genres分组,计算rating的平均值了,还可以按评分排序方便查看:

    genre_avg_rating = df_exploded.groupby('genres')['rating'].mean().sort_values(ascending=False)
    

大数据量优化建议

如果2500万行拆分后内存压力太大,可以考虑:

  • 只保留需要的列(genres和rating)再处理,减少内存占用:
    df_slim = df[['genres', 'rating']]
    df_slim['genres'] = df_slim['genres'].str.split('|')
    df_exploded_slim = df_slim.explode('genres')
    genre_avg_rating = df_exploded_slim.groupby('genres')['rating'].mean()
    
  • 如果内存还是不够,可以用Dask这类支持并行处理的库来分块处理数据,不过pandas的explode在大多数情况下已经能应付这个量级了。

验证结果

你可以用小样本测试一下,比如取前几行数据执行上述步骤,就能看到每个单独类型的平均评分是否符合预期啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 06:27:50