如何用Pandas按拆分后的单个电影类型分组求平均评分?
按单个电影类型分组计算平均评分解决方案
嘿,我明白你现在的困境——2500万行的大数据量,而且genres是多值组合,直接分组肯定得不到每个单独类型的结果对吧?别担心,咱们只需要先把多值的genres拆成单独的行,再做分组统计就搞定了,而且要兼顾效率哦!
核心思路
因为每部电影可能对应多个类型,咱们需要把每个电影-类型组合拆成独立的行,这样就能用常规的分组方法计算单个类型的平均评分了。针对大数据量,用pandas的explode方法是最高效的选择之一。
具体代码步骤
拆分genres为列表格式
先把用|分隔的字符串转换成列表,方便后续展开:df['genres'] = df['genres'].str.split('|')展开多值列为单独行
用explode把每个类型拆成单独的行,这一步会让每部电影对应它的每个类型生成一行数据:df_exploded = df.explode('genres')比如你给的示例数据,
Pulp Fiction (1994)会被拆成4行,分别对应Comedy、Crime、Drama、Thriller。分组计算平均评分
现在就可以按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
相关产品推荐
相关产品推荐

