繁体   English   中英

如果后续值非零,则将pandas零值替换为ffill非零

[英]Replace pandas zero value with ffill non-zero, if the subsequent value is non-zero

我需要将pandas中的“0”行数据替换为前一行非零值IF,并且仅在IF中,“0”后面的行中的值不为零。

101
92
78
0
107
0
0

会成为:

101
92
78
78
107
0
0

任何想法如何做到这一点将不胜感激:-)

谢谢!

使用shift你可以做

In [608]: df.loc[(df.val == 0) & (df.val.shift(-1) != 0), 'val'] = df.val.shift(1)

In [609]: df
Out[609]:
     val
0  101.0
1   92.0
2   78.0
3   78.0
4  107.0
5    0.0
6    0.0

答案类似于JohnGalt,但比较时更快:

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

暂无
暂无

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

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