如何基于另一DataFrame的Genre偏好过滤电影DataFrame的行?
筛选匹配用户偏好类型的电影实现方法
以下基于Python Pandas库实现,步骤清晰可复用:
1. 准备示例数据
先构造符合场景的测试DataFrame:
import pandas as pd # 电影数据集 movies = pd.DataFrame({ 'Movie_Name': ['闪灵', '盗梦空间', '泰坦尼克号', '电锯惊魂', '傲慢与偏见'], 'Genre': ['Horror', 'Sci-Fi, Thriller', 'Drama, Romance', 'Horror, Thriller', 'Drama'], 'Rating': [8.4, 8.8, 7.9, 7.6, 7.8] }) # 用户偏好数据集 users = pd.DataFrame({ 'User_ID': [1, 2], 'Name': ['张三', '李四'], 'Preference_Genre': ['Horror, Drama', 'Thriller'] })
2. 提取所有用户的偏好类型集合
先收集所有用户的偏好类型,去重后得到待匹配的类型池:
# 拆分用户偏好并去重,生成类型集合 preferred_genres = set() for pref in users['Preference_Genre']: preferred_genres.update(pref.split(', ')) # 最终得到:{'Horror', 'Drama', 'Thriller'}
3. 筛选符合条件的电影
利用Pandas的str.contains方法结合正则表达式,匹配Genre列中包含至少一个偏好类型的行:
# 构造正则匹配模式:匹配任意一个偏好类型 pattern = '|'.join(preferred_genres) # 执行筛选,case=False忽略大小写(按需调整) filtered_movies = movies[movies['Genre'].str.contains(pattern, case=False)]
4. 查看筛选结果
打印筛选后的电影数据:
print(filtered_movies)
输出结果:
Movie_Name Genre Rating 0 闪灵 Horror 8.4 1 盗梦空间 Sci-Fi, Thriller 8.8 2 泰坦尼克号 Drama, Romance 7.9 3 电锯惊魂 Horror, Thriller 7.6 4 傲慢与偏见 Drama 7.8
额外说明
- 若Genre列的分隔符不是
,,需同步调整split方法的参数和正则逻辑 - 若需要针对单个用户筛选,只需提取该用户的偏好类型即可:
# 筛选符合用户张三偏好的电影 target_user_pref = users.loc[users['Name'] == '张三', 'Preference_Genre'].iloc[0].split(', ') user_pattern = '|'.join(target_user_pref) user_filtered_movies = movies[movies['Genre'].str.contains(user_pattern, case=False)]
内容的提问来源于stack exchange,提问作者Annisa Lianda
相关产品推荐
相关产品推荐

