我想通过只替换数据帧中的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列不受影响,因为它只有一个0(而不是连续的0)。
我已经对这个答案进行了实验。在Pandas DataFrame列中替换超过n个连续的值。
这是对的,但是这个解决方案在给定的列中保留了第一个0,这在我的情况下是不需要的。
让我们做 shift
与 mask
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