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

如何通过Pandas的groupby获取每年出现最多的电影类型?

问题描述

我有一个电影DataFrame,想要按年份分组,获取每年出现次数最多的电影类型:

import pandas as pd

data = {'year' : [2000,2000,2001,2001, 2001,2001,2002,2002,2002,2002], 
        'movie': ['movie1','movie2', 'movie3', 'movie4', 'movie5', 'movie6', 'movie7', 'movie8', 'movie9', 'movie10'], 
        'genre': ['action', 'action', 'comedy', 'drama','comedy', 'horror', 'sci-fi','horror', 'horror', 'action']}
movie = pd.DataFrame(data)

期望输出:

2000 : action 
2001 : comedy
2002 : horror

我尝试了以下代码:

movie.groupby(["year", "genre"])['genre'].value_counts().max(level = 0)

但只得到了各年份的最高出现次数:

2
2
3

需要调整代码以得到期望的类型结果。


解决方案1:分组后用value_counts+idxmax

先按年份分组,对每个组的genre列统计频次,再取频次最高值对应的索引(即电影类型):

result = movie.groupby('year')['genre'].apply(lambda x: x.value_counts().idxmax())
print(result)

输出结果:

year
2000    action
2001    comedy
2002    horror
Name: genre, dtype: object

如果要转换成题目期望的字符串格式,可循环输出:

for year, genre in result.items():
    print(f"{year} : {genre}")

解决方案2:使用mode方法

mode方法直接返回每组的众数(出现次数最多的元素),更简洁:

result = movie.groupby('year')['genre'].agg(pd.Series.mode)
print(result)

输出与方案1一致,同样可通过循环转换成目标格式。

解决方案3:pivot_table统计频次后取最大值对应类型

先构建年份-类型的频次统计表,再按年份筛选频次最高的类型:

# 构建频次表,填充缺失值为0
count_table = movie.pivot_table(index='year', columns='genre', aggfunc='size', fill_value=0)
# 取每行最大值对应的列名(即电影类型)
result = count_table.idxmax(axis=1)
print(result)

输出同样符合要求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:35:24