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

基于前一个非NaN值递加1的方式向前填充NaN值

解决方案:按递增规则填充DataFrame中的NaN值

要实现需求中的填充规则(非NaN值之后的NaN按前一个非NaN值逐行加1填充,开头的NaN保留),可以利用pandas的分组和向量化操作完成,无需循环:

实现代码

替换示例中####### Turn "df" into "desired_df" here #######部分的代码如下:

import pandas as pd

# 标记非NaN值,生成分组ID:每个非NaN值及后续NaN为一组,开头NaN单独成组
mask = df['col'].notna()
df['group'] = mask.cumsum()

# 对每个分组执行递增填充逻辑
df['col'] = df.groupby('group')['col'].transform(
    lambda x: x.iloc[0] + x.reset_index(drop=True).index if not pd.isna(x.iloc[0]) else x
)

# 删除临时分组列
df.drop('group', axis=1, inplace=True)

逻辑说明

  1. 分组标记:通过notna()识别非NaN值,再用cumsum()生成分组ID。每遇到一个非NaN值,分组ID就递增,确保该非NaN值和后续所有NaN同属一组,开头的NaN会被分到ID为0的组。
  2. 分组填充:对每个分组,若分组的第一个值是有效数值(非NaN),则用该起始值加上组内每行的索引偏移量(reset_index(drop=True).index),实现逐行加1的填充;若为开头的NaN分组,直接保留原数据。
  3. 清理临时列:删除用于分组的临时列,得到目标结果。

运行后执行assert语句即可验证结果与desired_df完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:46:47