如何在pandas DataFrame中计算各年份平均User Rating并找出最高值年份
计算平均用户评分最高年份的实现方法
你可以直接用Pandas内置的groupby聚合方法完成需求,不需要手动遍历唯一年份,代码更简洁执行效率也更高:
最优实现方案
import pandas as pd import numpy as np # 先修正你之前代码的小问题:df.['Year']多了多余的点,正确写法为df['Year'] # 1. 按Year分组,计算每组User Rating的平均值 year_avg_rating = df.groupby('Year')['User Rating'].mean() # 2. 直接获取平均评分最高的年份和对应评分 max_rating_year = year_avg_rating.idxmax() max_rating = year_avg_rating.max() print(f"平均评分最高的年份:{max_rating_year},对应平均评分:{max_rating:.2f}")
如果你需要先查看所有年份的平均评分排序,可以追加以下代码:
# 按平均评分降序输出所有年份的统计结果 sorted_year_rating = year_avg_rating.sort_values(ascending=False) print(sorted_year_rating)
备选方案(沿用你现有的唯一年份列表逻辑)
如果你要沿用你已经拿到的唯一年份列表的思路手动遍历计算,可以用以下代码实现:
import numpy as np years = df['Year'].unique() years = np.sort(years) year_rating_dict = {} for y in years: # 筛选当前年份的所有User Rating记录,计算均值 current_avg = df[df['Year'] == y]['User Rating'].mean() year_rating_dict[y] = current_avg # 从字典中取出值最大的键(即平均评分最高的年份) max_rating_year = max(year_rating_dict, key=year_rating_dict.get) max_rating = year_rating_dict[max_rating_year]
注意事项
Pandas的mean()方法默认会自动忽略NaN空值,不需要额外做空值过滤;如果你需要排除空值记录后再统计,可以提前执行df = df.dropna(subset=['User Rating', 'Year'])做数据清洗。
内容的提问来源于stack exchange,提问作者a002k
相关产品推荐
相关产品推荐

