在熊猫中,用NaN替换连续的0

时间:2020-05-12 13:01:37

标签: pandas

我想通过仅替换数据帧中的CONSECUTIVE 0来清除某些数据

给出:

import pandas as pd
import numpy as np
d = [[1,np.NaN,3,4],[2,0,0,np.NaN],[3,np.NaN,0,0],[4,np.NaN,0,0]]
df = pd.DataFrame(d, columns=['a', 'b', 'c', 'd'])
df
   a    b  c    d
0  1  NaN  3  4.0
1  2  0.0  0  NaN
2  3  NaN  0  0.0
3  4  NaN  0  0.0

期望的结果应该是:

   a    b  c    d
0  1  NaN  3   4.0
1  2  0.0  NaN NaN
2  3  NaN  NaN NaN
3  4  NaN  NaN NaN

其中c和d列受影响,而b列则不受影响,因为它只有1个零(而不是连续的0)。

我已经尝试过以下答案: Replacing more than n consecutive values in Pandas DataFrame column

这是正确的,但是解决方案将第一个0保留在给定的列中,这在我的情况下是不希望的。

1 个答案:

答案 0 :(得分:1)

让我们用shiftmask

df=df.mask((df.shift().eq(df)|df.eq(df.shift(-1)))&(df==0))
Out[469]: 
   a    b    c    d
0  1  NaN  3.0  4.0
1  2  0.0  NaN  NaN
2  3  NaN  NaN  NaN
3  4  NaN  NaN  NaN