给一个DataFrame我想转换到另一个,其中transform函数在前一行和当前行上运行。 在给定的示例中,
RowID =1 is copied as is,
但从RowID 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 :(得分:2)
即将开始,用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