繁体   English   中英

如何通过从最后一个有效值开始乘以“K”因子来转换缺失值?

[英]How to transform missing values ​through a multiplication of a "K" factor starting at the last valid value?

我的问题是从出现在缺失值“NaN”之前的第一个有效数字开始应用乘法因子K=0.5 ,并继续将该因子 K 应用于计算值,直到该期间的最后一个缺失值 NaN。

表A:

Bird1  Bird2  Bird3 
    
     100  50      200  
     50   40      100  
     40   40      80  
     NaN  80      200  
     NaN  50      NaN 
     NaN  90      NaN 
     100  12      40 

结果应如下表所示。 如何在 python 中实现此代码?

表 B:

Bird1   Bird2    Bird3 

 100     50      200  
 50      40      100  
 40      40      80  
 20      80      200  
 10      50      100 
 5       90      50 
 100     12      40

使用df.interpolate()命令不合适,因为它还使用缺失值 NaN 之后的值。 我只想在缺失值 NaN 之前开始并应用于第一个值的常量K

您可以编写自定义插值 function:

def interp(s, K=0.5):
    # group by non-NA then NA
    g = s.groupby(s.notna().cumsum())
    # get decreasing factors
    factor = K**g.cumcount()
    # interpolate
    return g.transform('first').mul(factor)

out = df.apply(interp)
#     df.apply(interp, K=0.5)

output:

   Bird1  Bird2  Bird3
0  100.0   50.0  200.0
1   50.0   40.0  100.0
2   40.0   40.0   80.0
3   20.0   80.0  200.0
4   10.0   50.0  100.0
5    5.0   90.0   50.0
6  100.0   12.0   40.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM