我有一个pandas数据框,其中的部分如下所示(零是NaN):
...
18 19 20
197 14 28 14
198 14 0 14
200 0 0 0
201 0 0 0
202 15 23 12
203 16 0 18
204 0 0 0
205 0 0 0
...
我需要用最后一行中没有NaN的值填充特定列上具有NaN的行。
在我的示例中,第200,201行将填充197行中的值,而204,205行将填充202行中的值。
LE:第198和203行在我感兴趣的所有列上都没有NaN,因此将它们单独保留。
编写此代码的Python方法是什么?
答案 0 :(得分:2)
我认为您需要使用DataFrame.mask
进行ffill
的前向填充,以便为DataFrame.any
至少包含一个NaN
的所有行创建缺失值,然后使用并非所有DataFrame.all
行中都缺少的值:
df = df.replace(0, np.nan)
m = df.isnull()
df1 = df.mask(m.any(axis=1)).ffill()
df2 = df.mask(m.all(axis=1), df1, axis=1)
print (df2)
18 19 20
197 14.0 28.0 14.0
198 14.0 NaN 14.0
200 14.0 28.0 14.0
201 14.0 28.0 14.0
202 15.0 23.0 12.0
203 16.0 NaN 18.0
204 15.0 23.0 12.0
205 15.0 23.0 12.0