如何在pandas DataFrame中按衰减率向前填充NaN值
实现方法
你可以通过计算每个空值距离上一个非空值的步长,结合前向填充值乘以衰减系数的步长次方实现,完整代码如下:
import pandas as pd import numpy as np # 示例数据构造 df1 = pd.DataFrame({ 'Column1':[1, 'NaN', 3, 'NaN'], 'Column2':[5, 6, 7, 8], 'Column3':[-9, -10, 'NaN', 'NaN'], 'Column4':[13, 15, 'NaN', 'NaN'] }) df1 = df1.replace('NaN',np.nan) # 核心计算逻辑 # 1. 计算每个位置距离上一个非空值的步长,非空位置步长为0 step = df1.isnull().groupby(df1.notnull().cumsum()).cumcount() # 2. 前向填充得到基准值 ffill_base = df1.ffill() # 3. 基准值乘以 0.9 的步长次方得到最终结果 result = ffill_base * (0.9 ** step) # 如需保留两位小数可执行以下代码 result = result.round(2) print(result)
输出结果完全匹配预期:
Column1 Column2 Column3 Column4 0 1.0 5 -9.0 13.00 1 0.9 6 -10.0 15.00 2 3.0 7 -9.0 13.50 3 2.7 8 -8.1 12.15
内容的提问来源于stack exchange,提问作者fjurt
相关产品推荐
相关产品推荐

