You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于电影DataFrame的Genre集合实现多归属分组及聚合?

多类别电影DataFrame的分组方案(支持单电影归属多分组)

直接用groupby处理原DataFrame不是正确的选择,因为默认的groupby是基于每行的单一分组键来聚合的,没法让一部同时属于多个类别的电影出现在对应的多个分组里。不过我们可以先对数据做一步转换,之后再用groupby就能完美满足你的需求。


1. 先优化类别集合的提取(可选,但更高效)

你原来提取类别集合的代码可以用Pandas的字符串方法简化,不用手动循环:

# 直接拆分、展开所有类别并去重得到集合
gset = set(df['genres'].str.split(', ', expand=True).stack().unique())

这样代码更简洁,运行效率也更高,结果和你原来的方法完全一致。

2. 核心步骤:将多类别行拆分为多行

要实现"一部电影属于多个类别就出现在对应分组",关键是把每个电影的多个类别拆成独立的行,每个类别对应原电影的一条完整记录。用Pandas的explode方法就能轻松做到:

# 第一步:把逗号分隔的genres字符串转为列表
df['genres'] = df['genres'].str.split(', ')
# 第二步:将列表拆分为多行,每个类别对应一行原数据
exploded_df = df.explode('genres')

这一步之后,exploded_df里每一行只对应一个类别,原来属于多个类别的电影会被复制成多行,分别对应它的每个类别。

3. 用groupby做聚合操作

现在就可以正常用groupby按genres列分组,执行你需要的聚合操作了。比如统计每个类别的电影数量、平均评分:

# 按类别分组并计算统计指标
genre_agg = exploded_df.groupby('genres').agg(
    total_movies=('title', 'nunique'),  # 统计每个类别的独特电影数
    avg_rating=('rating', 'mean')       # 计算每个类别的平均评分
).reset_index()

# 查看结果,会包含所有24个类别
print(genre_agg)

为什么直接用原DataFrame的groupby不行?

如果直接对原DataFrame的genres列做groupby,它会把整个逗号分隔的字符串当成一个分组键(比如"Action, Drama"会被视为一个单独的分组),而不是把电影分到Action和Drama两个分组里,完全不符合你"一部电影出现在多个分组"的需求。

这种拆分后再分组的方式,完美解决了你的两个需求:既可以正常执行聚合操作,又能保证每个电影出现在所有它所属的类别分组中,完全消除数据收集阶段的排序或标记偏差。

内容的提问来源于stack exchange,提问作者sandeepmohan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:15:14