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

Pandas:如何按release_year列统计对应最常见的genre值

解决方案

基础实现(仅包含有数据的年份)

假设你的DataFrame名为df,可以通过分组后取众数并调整格式来实现需求:

import pandas as pd

# 按年份分组,提取流派的众数(若有多个众数取第一个)
result = df.groupby('release_year')['genre'].agg(lambda x: x.mode().iloc[0]).reset_index()

# 确保列名与需求一致(如果分组后列名已经正确可省略此步)
result.columns = ['release_year', 'genre']

运行后result就会呈现你需要的格式:

release_year    genre
0          2020    Horror
1          2021    Crime
2          2023    Action
...

处理特殊情况

  1. 存在多个众数的年份:如果某一年有多个流派出现次数相同,上述代码会取第一个出现的众数。若需要保留所有众数,可去掉.iloc[0],此时结果中genre列会是列表格式。
  2. 包含无数据的年份:如果需要展示连续年份(比如原数据没有2022年但结果要包含),可以先生成完整的年份序列,再合并结果并填充默认值:
# 生成从最小到最大年份的完整序列
min_year = df['release_year'].min()
max_year = df['release_year'].max()
all_years = pd.DataFrame({'release_year': range(min_year, max_year + 1)})

# 获取有数据年份的流派众数
genre_mode = df.groupby('release_year')['genre'].agg(lambda x: x.mode().iloc[0]).reset_index()

# 合并并填充无数据年份的流派(这里默认填充'Crime',可按需修改)
result = all_years.merge(genre_mode, on='release_year', how='left').fillna({'genre': 'Crime'})

为什么之前的组合没生效?

直接使用df.groupby('release_year')['genre'].mode()会返回带多级索引的结果,需要通过reset_index()调整结构才能得到你需要的扁平化格式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 10:17:23