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

如何用0.1增量填充Pandas DataFrame中的缺失值?

解决Pandas DataFrame缺失值按固定增量填充的问题

我明白你的需求啦——就是要把DataFrame里的NaN值,以前一个非缺失值为起点,每次递增0.1来填充对吧?你提到用np.arange是个不错的思路,不过我们可以结合Pandas的分组功能来把这个逻辑落地,具体操作看下面:

第一步:先构造你的示例数据

首先我们先把你给出的DataFrame创建出来,方便后续测试:

import pandas as pd
import numpy as np

# 构造目标DataFrame
df = pd.DataFrame(
    {'A': [1, np.nan, 2, np.nan, np.nan, 3, 4, np.nan, 5, np.nan]},
    index=[0, 1, 2, 3, 4, 5, 6, 8, 9, 10]
)

第二步:核心填充逻辑

我们的思路是把每个非缺失值+后续连续的NaN划分为一个分组,然后给每组内的行标记“偏移序号”,最后用基准值(前一个非缺失值)加上偏移序号*0.1得到填充值:

# 1. 创建分组标识:每个非缺失值及其后续NaN为同一组
groups = df['A'].notna().cumsum()
# 2. 计算每组内的行偏移量(从0开始计数)
offsets = df.groupby(groups).cumcount()
# 3. 计算填充后的值:基准值(前向填充的非缺失值) + 偏移量*0.1
df['A'] = df['A'].ffill() + offsets * 0.1

如果你想更简洁,也可以把这几步写成链式操作,不用单独保存中间变量:

df['A'] = df['A'].ffill() + df.groupby(df['A'].notna().cumsum()).cumcount() * 0.1

看看结果

现在打印df['A']就能得到你想要的效果:

0     1.0
1     1.1
2     2.0
3     2.1
4     2.2
5     3.0
6     4.0
8     4.1
9     5.0
10    5.1
Name: A, dtype: float64

原理简单解释

  • df['A'].notna().cumsum():非缺失值的位置会返回True(即1),累加后会给每个连续的“非缺失值+NaN块”分配唯一的组号,比如第一个非缺失值1和后面的NaN是组1,第二个非缺失值2和后面两个NaN是组2,以此类推。
  • groupby(groups).cumcount():给每个组内的行从0开始计数,非缺失值本身的偏移量是0,所以加0后还是原值;后面的NaN依次是1、2...乘以0.1就正好是你要的增量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:18:24