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

要基于指定的流派列表分割数据,可以使用 布尔索引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]
相关推荐
零小陈上(shouhou6668889)1 小时前
YOLOv8+PyQt5海洋船只检测(可以重新训练,yolov8模型,从图像、视频和摄像头三种路径识别检测)
开发语言·python·yolo
znhy_231 小时前
day36打卡
python
gf13211112 小时前
python_字幕文本、音频、视频一键组合
python·音视频·swift
我的xiaodoujiao2 小时前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 32--开源电商商城系统项目实战--如何区分登录状态
python·学习·测试工具·pytest
ZAz_2 小时前
DAY 38 模型可视化与推理
python
艾上编程2 小时前
第二章——数据分析场景之用Python进行CSV/Excel数据清洗:为数据分析筑牢根基
python·数据分析·excel
闲人编程2 小时前
FastAPI性能优化技巧
后端·python·性能优化·fastapi·性能·codecapsule
Amazon数据采集2 小时前
# 🚀 亚马逊URL参数拼接实战:数据采集效率提升指南
python
岁月宁静2 小时前
FastAPI 入门指南
人工智能·后端·python
AI小云2 小时前
【数据操作与可视化】Serborn绘图-类别散点图和热力图
python·数据可视化