Заполните NaN в обоих столбцах либо значения присутствуют - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть два столбца в df, иногда он имеет NaN в одном столбце, иногда в обоих столбцах.Я хочу заполнить NaN тем же значением, если присутствует какое-либо из значений столбцов.

Например, вход:

       col1      col2
0  3.375000  4.075000
1  2.450000  1.567100
2       NaN       NaN
3  3.248083       NaN
4       NaN  2.335725
5  2.150000  3.218750

Выход:

       col1      col2
0  3.375000  4.075000
1  2.450000  1.567100
2       NaN       NaN
3  3.248083  3.248083
4  2.335725  2.335725
5  2.150000  3.218750

Для этогоЯ попытался,

print df.T.fillna(method='bfill').fillna(method='ffill').T

Выше приведен требуемый результат, но я думаю, что я добавляю больше сложности в свой код.Есть ли другой лучший подход для этого?

1 Ответ

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

Вам не нужно транспонировать, вы можете указать ось:

df.ffill(1).bfill(1)

       col1      col2
0  3.375000  4.075000
1  2.450000  1.567100
2       NaN       NaN
3  3.248083  3.248083
4  2.335725  2.335725
5  2.150000  3.218750

Если у вас есть несколько столбцов, но вы не хотите прикасаться к некоторым из них, вы можете нарезать, заполнять иприсваивать обратно.

df
       col1      col2  col3
0  3.375000  4.075000   NaN
1  2.450000  1.567100   2.0
2       NaN       NaN   3.0
3  3.248083       NaN   5.0
4       NaN  2.335725   NaN
5  2.150000  3.218750   5.0

include = ['col1', 'col2']
# Or,
# exclude = ['col3']
# include = df.columns.difference(exclude)
df[include] = df[include].ffill(1).bfill(1)

df

       col1      col2  col3
0  3.375000  4.075000   NaN
1  2.450000  1.567100   2.0
2       NaN       NaN   3.0
3  3.248083  3.248083   5.0
4  2.335725  2.335725   NaN
5  2.150000  3.218750   5.0

Если столбцов всего два, вы также можете использовать combine_first.

df.col1 = df.col1.combine_first(df.col2) 
df.col2 = df.col2.combine_first(df.col1)

       col1      col2
0  3.375000  4.075000
1  2.450000  1.567100
2       NaN       NaN
3  3.248083  3.248083
4  2.335725  2.335725
5  2.150000  3.218750
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...