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

如何使用numpy.where()或fillna()逐行结合增长率填充pandas NaN值

你之前使用的np.where和fillna都是基于填充前的原始DataFrame数据做向量化计算,计算第6行的填充值时,取到的shift(1)还是第5行未填充的NaN,因此只能填充首个缺失行,无法复用刚计算出的新值。

可以通过增长率累积乘积的方法一步完成填充,不需要重复运行代码:

import pandas as pd
import numpy as np

data = {'value':[55,58,60,62,64,np.nan,np.nan],
        'growth_rate': [np.nan,1.0545,1.034483,1.033333,1.032258,1.02,1.03]}
df = pd.DataFrame(data)  

# 定位value列最后一个非缺失值的索引和对应基准值
last_valid_idx = df['value'].last_valid_index()
base_val = df.loc[last_valid_idx, 'value']

# 用基准值乘后续增长率的累积乘积,直接填充所有缺失值
df.loc[last_valid_idx+1:, 'value'] = base_val * df.loc[last_valid_idx+1:, 'growth_rate'].cumprod()

print(df)

运行后输出结果符合预期:

value  growth_rate
0  55.0000          NaN
1  58.0000     1.054500
2  60.0000     1.034483
3  62.0000     1.033333
4  64.0000     1.032258
5  65.2800     1.020000
6  67.2384     1.030000

该方法为pandas原生向量化运算,不需要逐行循环,执行效率高,且支持任意长度的后续连续缺失值填充。

内容的提问来源于stack exchange,提问作者Juan Pablo Romero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:15:03