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

如何在Python Pandas中按DataFrame列内的列表值分组?

处理Pandas中含列表的genre列分组需求

嘿,这个场景我太熟悉了!当你的DataFrame里genre列是列表类型时,直接分组肯定得不到想要的结果——毕竟每个电影对应多个流派嘛。别担心,用Pandas的explode()方法就能轻松解决,我给你一步步拆解:

1. 先准备示例数据(你可以替换成自己的数据集)

首先咱们构造一个和你场景匹配的示例DataFrame,方便你对照理解:

import pandas as pd

data = {
    'title': ['星际穿越', '盗梦空间', '肖申克的救赎', '千与千寻'],
    'genre': [['科幻', '冒险'], ['科幻', '悬疑'], ['剧情'], ['动画', '奇幻', '剧情']],
    'rating': [9.4, 9.4, 9.7, 9.4]
}
df = pd.DataFrame(data)

2. 把genre列的列表拆成单独行

这是最关键的一步!用explode()方法把每个电影对应的多个流派拆成独立的行,这样每个行就只对应一个流派了:

# 展开genre列的列表,生成新的DataFrame
exploded_df = df.explode('genre')

展开后的结果长这样:

titlegenrerating
星际穿越科幻9.4
星际穿越冒险9.4
盗梦空间科幻9.4
盗梦空间悬疑9.4
肖申克的救赎剧情9.7
千与千寻动画9.4
千与千寻奇幻9.4
千与千寻剧情9.4

3. 按genre分组并聚合统计

现在就可以像普通列一样分组了!比如统计每个流派的电影数量、平均评分:

# 分组后自定义聚合逻辑
genre_stats = exploded_df.groupby('genre').agg(
    电影数量=('title', 'nunique'),  # 用nunique避免同一电影多次计数
    平均评分=('rating', 'mean')
).reset_index()

最终得到的统计结果:

genre电影数量平均评分
冒险19.4
动画19.4
奇幻19.4
剧情29.55
科幻29.4
悬疑19.4

额外小提示

如果你的genre列里存在空列表或者NaN值,可以在展开后加一步清理:

exploded_df = df.explode('genre').dropna(subset=['genre'])

这样就能避免无效的分组啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:59:05