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

Pandas按年份提取最高Score对应Gross并计算均值的实现问题

问题解决方法

关于transform的作用说明

  • 普通的groupby('Year')['Score'].max()是按年份分组后,每个分组仅返回1个最高得分,输出结果长度等于年份数量,你拿到的4个值就对应1920/1930/1940/1960四个年份的最高分
  • groupby('Year')['Score'].transform('max')会把每个分组计算得到的最高分,回填到该分组的所有行上,输出长度和你的原始数据集行数完全一致,你拿到的13个值,每一行就代表当前行所属年份的最高得分,比如前3行都是1920年的,所以值都是1920年的最高分5.5

完整实现代码

import pandas as pd

# 读取数据
df = pd.read_csv('test.csv')

# 筛选出得分等于当年最高分的记录,按年份分组计算Gross的平均值
# 不需要保留中间字段可直接写为一行
result = df[df['Score'] == df.groupby('Year')['Score'].transform('max')].groupby('Year')['Gross'].mean()

print(result)

输出结果说明

运行后得到的结果如下,和需求完全匹配:

Year
1920    160.000000
1930    250.000000
1940    616.666667
1960    300.000000
Name: Gross, dtype: float64
  • 1920年两条最高分记录的Gross为150、170,平均值160
  • 1930年两条最高分记录的Gross为300、200,平均值250
  • 1940年三条最高分记录的Gross为500、650、700,平均值约616.67
  • 1960年两条最高分记录的Gross为290、310,平均值300

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:54:02