Панды Заполните, только если есть значение в более позднем ряду - PullRequest
0 голосов
/ 05 декабря 2018

Если у вас есть фрейм данных pandas

A    B    C
1    1    NA
2    1    1
3    NA   3
NA   NA   NA
4    NA   NA
5    NA   4

Я хочу заполнять значения только в том случае, если между NA и концом фрейма данных есть значение.Возможно ли это?

Таким образом, результат будет

A    B    C
1    1    NA
2    1    1
3    NA   3
3    NA   3
4    NA   3
5    NA   4

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Используйте mask с ffill для прямого заполнения и проверки непропущенных значений с обратным заполнением:

df = df.mask(df.ffill().notnull(),df.bfill())

Или numpy.where с DataFrame конструктор:

df = pd.DataFrame(np.where(df.ffill().notnull(),df.bfill(), df), 
                  index=df.index, 
                  columns=df.columns)

print (df)
     A    B    C
0  1.0  1.0  NaN
1  2.0  1.0  1.0
2  3.0  NaN  3.0
3  4.0  NaN  4.0
4  4.0  NaN  4.0
5  5.0  NaN  4.0
0 голосов
/ 05 декабря 2018

Используйте ffill и bfill.

df.ffill().where(df.bfill().notna())
# Or,
# df.where(df.bfill().isna(), df.ffill())

     A    B    C
0  1.0  1.0  NaN
1  2.0  1.0  1.0
2  3.0  NaN  3.0
3  3.0  NaN  3.0
4  4.0  NaN  3.0
5  5.0  NaN  4.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...