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

要基于指定的流派列表分割数据,可以使用 布尔索引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图像识别3 小时前
71_基于深度学习的布料瑕疵检测识别系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
python·深度学习·yolo
千码君20164 小时前
React Native:从react的解构看编程众多语言中的解构
java·javascript·python·react native·react.js·解包·解构
淮北4944 小时前
windows安装minicoda
windows·python·conda
爱喝白开水a6 小时前
LangChain 基础系列之 Prompt 工程详解:从设计原理到实战模板_langchain prompt
开发语言·数据库·人工智能·python·langchain·prompt·知识图谱
默默coding的程序猿7 小时前
3.git的分支携带问题是什么?怎么解决?
java·git·python·svn·gitee·github·intellij-idea
新子y9 小时前
【小白笔记】PyTorch 和 Python 基础的这些问题
pytorch·笔记·python
我是李武涯9 小时前
PyTorch DataLoader 高级用法
人工智能·pytorch·python
Lynnxiaowen9 小时前
今天我们开始学习python语句和模块
linux·运维·开发语言·python·学习
ThreeAu.10 小时前
pytest 实战:用例管理、插件技巧、断言详解
python·单元测试·pytest·测试开发工程师
资源补给站10 小时前
服务器高效操作指南:Python 环境退出与 Linux 终端快捷键全解析
linux·服务器·python