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时,这才有效,如果有一个函数可以这样做,我可以根据需要编辑这个函数?