Панды заполнить из последнего ряда, отвечающие определенным критериям? - PullRequest
0 голосов
/ 03 марта 2019

У меня есть pandas dataframe, у которого есть разделы, похожие на эти (нули - это 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 во всех столбцах I 'Я заинтересован в том, чтобы они остались одни.

Как бы это было написано питонами?

1 Ответ

0 голосов
/ 03 марта 2019

Я полагаю, что вам нужно заполнить форвардом на ffill с помощью DataFrame.mask для создания пропущенных значений для всех строк с хотя бы одним NaN на DataFrame.any, а затем дляотфильтровывать строки с не всеми пропущенными значениями в строке по 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...