Replace pandas null value with ffill non-zero if subsequent value is nonzero
2 answers
This answer is similar to JohnGalt , but compares faster:
In [12]: np.where((df.Val.values==0)&(df.Val.shift(-1)!=0),df.Val.shift(),df.Val)
Out[31]: array([ 101., 92., 78., 78., 107., 0., 0.])
In [24]: %timeit np.where((df.Val.values==0)&(df.Val.shift(-1)!=0),df.Val.shift(),df.Val)
1000 loops, best of 3: 671 ยตs per loop
In [25]: %timeit df.loc[(df.Val == 0) & (df.Val.shift(-1) != 0), 'val'] = df.Val.shift(1)
100 loops, best of 3: 2.01 ms per loop
+1
source to share