合并以仅替换nan值

时间:2019-05-09 12:30:58

标签: pandas merge missing-data

我只需要替换col B中col A中的nan值

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 :(得分:0)

可能没有我想的那么优雅,但是您可以将AB合并在一起,然后使用添加的列填充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