如何在DataFrame中按分级获取对应最高分的影片标题?
解决方案
你的问题出在groupby('rating').max()会对每列单独取最大值,字符串类型的title列会返回字典序最大的字符串,而非对应最高分的影片标题。以下是两种无需循环的高效解决方法:
方法一:排序后去重
先按分级升序、分数降序排序,再保留每个分级的第一条记录(即最高分影片):
# 按rating升序、score降序排序,确保每组最高分在最上方 movie_df_sorted = movie_df.sort_values(by=['rating', 'score'], ascending=[True, False]) # 保留每个rating的第一条记录,自动剔除同分级的其他低分行 top_movies = movie_df_sorted.drop_duplicates(subset='rating', keep='first') # 整理为预期的输出格式 result_str = ', '.join([f"{row['rating']} : {row['title']}" for _, row in top_movies.iterrows()]) print(result_str)
方法二:用idxmax定位最高分索引
利用idxmax()获取每个分级中分数最高的行索引,再通过索引提取对应记录:
# 获取每个rating分组中score最大值对应的行索引 max_score_idx = movie_df.groupby('rating')['score'].idxmax() # 根据索引提取对应的影片记录 top_movies = movie_df.loc[max_score_idx] # 整理输出 result_str = ', '.join([f"{row['rating']} : {row['title']}" for _, row in top_movies.iterrows()]) print(result_str)
两种方法都能保证获取每个分级下与最高分关联的正确标题,且符合你“无循环”的要求。
内容的提问来源于stack exchange,提问作者lowrain
相关产品推荐
相关产品推荐

