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

如何使用Pandas基于列表类型的演员字段对电影数据分组统计?

如何基于Pandas中列表类型字段统计演员出现次数

问题背景

你定义了包含title、director、actors(列表类型)的Movie类:

class Movie:
    def __init__(self,
                 title: str,
                 director: str,
                 actors: list[str]):
        self.title = title
        self.director = director
        self.actors: list[str] = actors

并创建了3个电影实例的列表:

movies = [Movie('Barton Fink', 'Joel Coen', ['John Turturro', 'John Goodman', 'Judy Davis']),
          Movie('The Big Lebowski', 'Joel Coen', ['Jeff Bridges', 'John Goodman', 'Steve Buscemi', 'John Turturro']),
          Movie('The Big Easy', 'Jim McBride', ['Dennis Quaid', 'Ellen Barkin', 'John Goodman']),
         ]

统计导演出现次数的代码可正常运行:

from pandas import DataFrame

df = DataFrame([vars(m) for m in movies])
grouped = df.groupby(['director']).size().sort_values(ascending=False)
print(grouped)

但尝试基于actors字段分组统计时,因列表为不可哈希类型报错:

df = DataFrame([vars(m) for m in movies])
grouped = df.groupby(['actors']).size().sort_values(ascending=False)

报错信息:

Error: (<class 'TypeError'>, TypeError("unhashable type: 'list'"), <traceback object at 0x00000274C91E4340>)


解决方案:展开列表后统计单个演员频次

列表属于不可哈希类型,无法直接作为分组键。要统计单个演员的出现次数,需先将actors字段的列表展开为单行单元素的形式,再分组统计。

使用Pandas的explode()方法即可实现:

from pandas import DataFrame

df = DataFrame([vars(m) for m in movies])
# 将actors列表展开,每个演员单独占一行
exploded_df = df.explode('actors')
# 按演员姓名分组,统计出现次数并降序排列
actor_counts = exploded_df.groupby('actors').size().sort_values(ascending=False)
print(actor_counts)

运行结果:

actors
John Goodman        3
John Turturro       2
Jeff Bridges        1
Steve Buscemi       1
Judy Davis          1
Dennis Quaid        1
Ellen Barkin        1
dtype: int64

补充:按完整演员组合分组(非单演员统计)

如果你的需求是统计完全相同的演员组合出现的次数,可将列表转换为可哈希的元组后再分组:

df = DataFrame([vars(m) for m in movies])
# 将actors列表转换为元组(可哈希类型)
df['actors_tuple'] = df['actors'].apply(tuple)
# 按元组分组统计
grouped = df.groupby('actors_tuple').size().sort_values(ascending=False)
print(grouped)

但显然你需要的是单个演员的频次统计,第一种方法是最优解。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:45:17