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

Pandas如何实现DataFrame空值取后续第一个非空得分生成新列

原代码问题原因

你的原有代码逻辑存在两个核心错误:

  • 循环中拿到的point仅为当前行的Score值,point+1是对数值做加法,完全无法定位到下一行的Score数据
  • 未实现向后遍历查找第一个非空得分的逻辑,空值判断也和Pandas默认的空值格式(NaN)不兼容

最优实现方案

Pandas内置的bfill()(向后填充)方法天生适配这个需求,一行代码即可完成:

import pandas as pd

# 先把空字符串转为Pandas可识别的空值,如果你的原始空值已经是NaN可跳过这步
df['Score'] = df['Score'].replace('', pd.NA)

# 向后填充空值,直接生成next_score列
df['next_score'] = df['Score'].bfill()

# 如果需要处理末尾全空的情况(最后几轮都没有得分),可以加默认值填充,比如填0
# df['next_score'] = df['Score'].bfill().fillna(0)

循环实现逻辑(供原理参考)

如果你需要手动用循环实现核心逻辑,可以倒序遍历记录最近的得分值,效率远高于正向逐行向后查找:

import pandas as pd

next_score = []
latest_score = None
# 倒序遍历Score列
for score in reversed(df['Score']):
    # 判断当前行是否为有效得分(兼容空字符串和NaN两种空值格式)
    if pd.notna(score) and score != '':
        latest_score = score
    next_score.append(latest_score)
# 倒序生成的列表要反转后才能匹配原行顺序
df['next_score'] = next_score[::-1]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 13:54:04