Объединить, чтобы заменить только значения Nan - PullRequest
1 голос
/ 09 мая 2019

Мне нужно заменить только значения Nan в столбце A от столбца B

A
  key  lvalue group
   a     1.0     a
   c     NaN     a
   e     3.0     a
   a     1.0     b
   c     NaN     b
   e     3.0     b

B
  key  lvalue
   a       2.0
   c       2.0
   e       5.0

Ожидаемый результат:

  key  lvalue group
   a     1.0     a
   c     2.0     a
   e     3.0     a
   a     1.0     b
   c     2.0     b
   e     3.0     b

Я пробовал что-то вроде:

A = np.where(A['lvalue'].isna(), B, A)
A.fillna(B)
A.combine_first(B)
pd.merge_ordered(A, B, left_by='key')
A.loc[A['lvalue'].isnull(),'lvalue'] = B['lvalue']

Но не повезло. Пожалуйста, помогите мне достичь этого

1 Ответ

0 голосов
/ 09 мая 2019

Возможно, не так элегантно, как я думал, но вы можете объединить A и B вместе, а затем использовать добавленный столбец для заполнения lvalue и, наконец, снова отбросить этот столбец:

C = A.merge(B, on='key', suffixes=('', '_y'), how='left')
C['lvalue'] = C['lvalue'].fillna(C['lvalue_y'])
C.drop(columns='lvalue_y')

#   key lvalue  group
# 0 a   1.0     a
# 1 c   2.0     a
# 2 e   3.0     a
# 3 a   1.0     b
# 4 c   2.0     b
# 5 e   3.0     b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...