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

Python DataFrame添加排名列求助:生成1-250唯一排名遇NaN

解决DataFrame排名全为NaN的问题

嘿,我来帮你搞定这个排名的问题!你的代码里有几个小问题导致rank列全是NaN,咱们一步步理清楚:

原代码的问题分析

  • 索引不匹配:你用IMDb_Top_250.nlargest(250,'imdb_score')生成了一个仅包含前250条高分记录的新DataFrame,但直接把它的结果赋值给原DataFrame的rank列时,由于两个DataFrame的索引可能不完全对应(原表可能有更多行),大部分位置会被填充为NaN。
  • 错误的排名赋值:apply(lambda x: range(1,250))完全不符合预期——apply是对每一行/列执行函数,你这里返回的是一个从1到249的序列(还少了第250名),不是单个行对应的排名值。

正确的解法

方法一:直接筛选后赋值连续排名

如果不需要处理同分情况,只想给前250条记录分配1到250的唯一排名,最简单的方式是:

# 1. 获取前250条高分记录,并重置索引(避免原索引干扰)
IMDb_Top_250 = IMDb_Top_250.nlargest(250, 'imdb_score').reset_index(drop=True)
# 2. 生成1到250的序列作为rank列
IMDb_Top_250['rank'] = range(1, 251)

reset_index(drop=True)会把筛选后的DataFrame索引重置为0到249,这样range(1,251)就能完美对应每一行,不会出现索引不匹配的问题。

方法二:用rank方法处理同分场景

如果存在多部电影分数相同,想要保证排名唯一(按原表顺序给同分电影分配不同排名),可以用rank方法:

# 1. 按imdb_score降序排名,method='first'保证同分按出现顺序排唯一排名
IMDb_Top_250['rank'] = IMDb_Top_250['imdb_score'].rank(ascending=False, method='first')
# 2. 筛选出排名前250的记录(如果原表行数超过250)
IMDb_Top_250 = IMDb_Top_250[IMDb_Top_250['rank'] <= 250]
# 3. 可选:将rank转为整数(默认rank返回浮点数)
IMDb_Top_250['rank'] = IMDb_Top_250['rank'].astype(int)

这个方法更健壮,能处理分数相同的情况,同时保证1到250的排名都是唯一的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 14:42:40