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

要基于指定的流派列表分割数据,可以使用 布尔索引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]
相关推荐
七颗糖很甜6 分钟前
“十五五”气象发展规划:聚焦五大核心任务
大数据·python·算法
爱码小白16 分钟前
Python 异常处理 完整学习笔记
开发语言·python
芝士就是力量啊 ೄ೨1 小时前
Python如何编写一个简单的类
开发语言·python
胖虎喜欢静香1 小时前
从零到一快速实现 Mini DeepResearch
人工智能·python·开源
qq_392690661 小时前
Redis怎样应对Redis集群整体宕机带来的雪崩
jvm·数据库·python
Muyuan19981 小时前
22.让 RAG Agent 更像真实产品:聊天页面优化、PDF 上传、知识库重建与检索片段展示
python·django·pdf·fastapi
程序员-小李2 小时前
uv 学习总结:从零到一掌握现代化 Python 工具链
python·学习·uv
Python大数据分析@2 小时前
CLI一键采集,使用Python搭建TikTok电商爬虫Agent
开发语言·爬虫·python
研究点啥好呢2 小时前
高德多模态算法工程师面试题精选:10道高频考题+答案解析
python·面试·llm·求职招聘·笔试·高德
测试员周周2 小时前
【AI测试系统】第3篇:AI生成的测试用例太“水”?14年老兵:规则引擎+AI才是王炸组合
人工智能·python·测试