熊猫从满足特定条件的最后一行填充?

时间:2019-03-03 12:07:14

标签: python pandas data-science

我有一个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方法是什么?

1 个答案:

答案 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