对应列表数据的分割和分组

要基于指定的流派列表分割数据,可以使用 布尔索引groupby 结合筛选。以下是具体方法:


场景假设

  • 数据列 genres 中的值可能是多流派的字符串,例如 "drama,action"["drama", "action"]
  • 目标:根据给定的流派列表 ['drama', 'action', 'thriller', 'european'],提取每个流派对应的所有电影数据。

方法 1:布尔索引(推荐)

直接筛选包含指定流派的记录,即使一条数据属于多个流派也会被重复计入不同分组。

步骤
  1. 预处理流派列(确保格式统一):

    python 复制代码
    # 将 genres 转换为小写,并拆分成列表(假设原数据用逗号分隔)
    combined_data['genres'] = combined_data['genres'].str.lower().str.split(',')
  2. 定义目标流派列表

    python 复制代码
    target_genres = ['drama', 'action', 'thriller', 'european']
  3. 创建字典存储各流派数据

    python 复制代码
    genre_dict = {}
    for genre in target_genres:
        # 生成布尔掩码:检查每条记录的 genres 是否包含当前流派
        mask = combined_data['genres'].apply(lambda x: genre in x)
        genre_dict[genre] = combined_data[mask]
验证结果
python 复制代码
# 查看 action 流派的数据量
print(f"Action 电影数量: {len(genre_dict['action'])}")

# 查看前 2 个流派的数据
for genre in list(genre_dict.keys())[:2]:
    print(f"=== {genre.upper()} ===")
    print(genre_dict[genre].head(2))

方法 2:使用 groupby + 筛选

genres 是单一标签(非多标签),可以直接分组:

步骤
  1. 预处理为单一流派(如无多标签):

    python 复制代码
    # 如果存在多标签,取第一个流派作为主标签(根据需求调整)
    combined_data['main_genre'] = combined_data['genres'].str.split(',').str[0]
  2. 分组并提取目标流派

    python 复制代码
    target_genres = ['drama', 'action', 'thriller', 'european']
    grouped = combined_data.groupby('main_genre')
    genre_dict = {genre: grouped.get_group(genre) for genre in target_genres if genre in grouped.groups}

输出示例

假设原始数据片段:

Title genres
Movie A drama,action
Movie B thriller
Movie C european,drama

执行方法 1 后,genre_dict['drama'] 将包含:

Title genres
Movie A ['drama', 'action']
Movie C ['european', 'drama']

注意事项

  1. 大小写敏感:预处理时统一转换为小写(或大写)。

  2. 多标签分隔符 :确保正确拆分原数据中的分隔符(如 ,| 等)。

  3. 空值处理 :检查并处理 genres 列中的缺失值:

    python 复制代码
    combined_data = combined_data.dropna(subset=['genres'])

完整代码示例

python 复制代码
import pandas as pd

# 假设数据格式
data = {
    'Title': ['Movie A', 'Movie B', 'Movie C', 'Movie D'],
    'genres': ['Drama,Action', 'Thriller', 'European,Drama', 'Comedy']
}
combined_data = pd.DataFrame(data)

# 预处理:转为小写并拆分成列表
combined_data['genres'] = combined_data['genres'].str.lower().str.split(',')

# 目标流派列表
target_genres = ['drama', 'action', 'thriller', 'european']

# 创建字典存储各流派数据
genre_dict = {}
for genre in target_genres:
    mask = combined_data['genres'].apply(lambda x: genre in x)
    genre_dict[genre] = combined_data[mask]

# 查看结果
for genre, df in genre_dict.items():
    print(f"\n=== {genre.upper()} 流派 ({len(df)} 部电影) ===")
    print(df[['Title', 'genres']])

输出结果

复制代码
=== DRAMA 流派 (2 部电影) ===
     Title          genres
0  Movie A  [drama, action]
2  Movie C  [european, drama]

=== ACTION 流派 (1 部电影) ===
     Title          genres
0  Movie A  [drama, action]

=== THRILLER 流派 (1 部电影) ===
     Title     genres
1  Movie B  [thriller]

=== EUROPEAN 流派 (1 部电影) ===
     Title          genres
2  Movie C  [european, drama]
相关推荐
Python×CATIA工业智造几秒前
Frida RPC高级应用:动态模拟执行Android so文件实战指南
开发语言·python·pycharm
onceco30 分钟前
领域LLM九讲——第5讲 为什么选择OpenManus而不是QwenAgent(附LLM免费api邀请码)
人工智能·python·深度学习·语言模型·自然语言处理·自动化
狐凄1 小时前
Python实例题:基于 Python 的简单聊天机器人
开发语言·python
悦悦子a啊2 小时前
Python之--基本知识
开发语言·前端·python
笑稀了的野生俊4 小时前
在服务器中下载 HuggingFace 模型:终极指南
linux·服务器·python·bash·gpu算力
Naiva4 小时前
【小技巧】Python+PyCharm IDE 配置解释器出错,环境配置不完整或不兼容。(小智AI、MCP、聚合数据、实时新闻查询、NBA赛事查询)
ide·python·pycharm
路来了4 小时前
Python小工具之PDF合并
开发语言·windows·python
蓝婷儿5 小时前
Python 机器学习核心入门与实战进阶 Day 3 - 决策树 & 随机森林模型实战
人工智能·python·机器学习
AntBlack5 小时前
拖了五个月 ,不当韭菜体验版算是正式发布了
前端·后端·python
.30-06Springfield5 小时前
决策树(Decision tree)算法详解(ID3、C4.5、CART)
人工智能·python·算法·决策树·机器学习