如何消除涉及多轮DataFrame过滤的循环,优化用户嵌入计算性能?
优化方案
核心思路
直接使用pandas向量化操作、表关联、分组聚合完全替换原有的三层循环逻辑,计算逻辑和原函数完全等价,数据量越大性能提升越明显,通常可以达到几十到上百倍的速度提升。
优化后代码
def calculate_user_embeddings(self): # 预处理动漫体裁:将逗号分隔的多体裁拆分为单行单体裁 shows_genre = self.shows[['anime_id', 'genre']].copy() shows_genre['genre'] = shows_genre['genre'].str.replace(' ', '').str.split(',') shows_genre = shows_genre.explode('genre') # 关联评分表和处理后的体裁表 merged_df = self.ratings[['user_id', 'anime_id', 'rating']].merge( shows_genre, on='anime_id', how='left' ) # 按用户ID和体裁分组求和,转换为目标嵌套字典格式 user_embeddings = merged_df.groupby(['user_id', 'genre'])['rating'].sum().unstack(fill_value=0) return user_embeddings.to_dict('index')
性能优化点说明
- 所有运算都在pandas底层C扩展层执行,完全规避了Python层的多层循环开销
- 替换了循环中重复执行的DataFrame过滤查找逻辑,仅执行1次关联操作即可完成所有数据匹配
- 内置分组聚合逻辑一次性完成所有评分求和,无需手动维护字典的键值存在性判断
内容的提问来源于stack exchange,提问作者ObiWanWheeler
相关产品推荐
相关产品推荐

