Python函数,用于计算前一行和当前行

Python函数,用于计算前一行和当前行,python,pandas,Python,Pandas,给出一个我想转换到另一个数据帧的数据帧,其中转换函数对前一行和当前行进行操作。 在给定的示例中 RowID=1按原样复制, 但是罗维德2号以后 Current Cell = Max(CurrentCell, Previous Cell * 0.9999 ) H4 <= MAX(B4, H3*0.9999) where, B4 = original value, H3 = the previous row **'After Transformation'** 当前单元格=最大值(当前

给出一个我想转换到另一个数据帧的数据帧,其中转换函数对前一行和当前行进行操作。 在给定的示例中

RowID=1按原样复制,

但是罗维德2号以后

Current Cell = Max(CurrentCell, Previous Cell * 0.9999 )
H4 <= MAX(B4, H3*0.9999)
where,
B4  = original value, 
H3  = the previous row **'After Transformation'**
当前单元格=最大值(当前单元格,前一单元格*0.9999)

H4现在开始,使用
cumsum
cumcount
创建您自己的函数,然后
update

def yourfun(s):
    s.update(s.mask(s==0).ffill()-s.groupby(s.mask(s==0).eq(1).cumsum()).cumcount()*0.0001)
    return s
df.apply(yourfun)
Out[291]: 
        1       2       3       4
0  0.0000  0.0000  1.0000  0.0000
1  0.0000  1.0000  0.9999  1.0000
2  0.0000  0.9999  0.9998  0.9999
3  1.0000  0.9998  0.9997  1.0000
4  0.9999  1.0000  1.0000  0.9999
5  0.9998  0.9999  0.9999  0.9998
6  1.0000  0.9998  0.9998  0.9997

接下来,使用
cumsum
cumcount
创建您自己的函数,然后
update

def yourfun(s):
    s.update(s.mask(s==0).ffill()-s.groupby(s.mask(s==0).eq(1).cumsum()).cumcount()*0.0001)
    return s
df.apply(yourfun)
Out[291]: 
        1       2       3       4
0  0.0000  0.0000  1.0000  0.0000
1  0.0000  1.0000  0.9999  1.0000
2  0.0000  0.9999  0.9998  0.9999
3  1.0000  0.9998  0.9997  1.0000
4  0.9999  1.0000  1.0000  0.9999
5  0.9998  0.9999  0.9999  0.9998
6  1.0000  0.9998  0.9998  0.9997

可能是函数?你能提供一个工作示例吗?可能是函数吗?你能提供一个工作示例吗?谢谢,数据可能不是布尔值,它能工作吗。。?您能解释一下您的代码吗。@user2458922更改为
s.mask(s==0)
谢谢。。有没有一种方法可以推广,例如,只有当乘法因子为0.9999时,这才有效,如果有一个函数可以做到这一点。如果需要,我可以编辑该函数?谢谢,数据可能不是布尔值,它会有效吗。。?您能解释一下您的代码吗。@user2458922更改为
s.mask(s==0)
谢谢。。有没有一种方法可以推广,例如,只有当乘法因子为0.9999时,这才有效,如果有一个函数可以这样做,我可以根据需要编辑这个函数?