使用Pandas在数据帧之间进行有条件替换



我对Python相当陌生,对跨数据帧的条件替换有疑问。

我有两个数据帧,A和B,只要有匹配的id(nid(,我就想用B中的日期更新A中的日期。

import pandas as pd
import numpy as np
nid1 = (1, 3, 4, 8)
date1 = ("2010-02-01", "2008-06-05", "2011-03-15", "2009-02-17") 
info1 = ("b", "m", "d", "m")
nid2 = (1, 3)
date2 = ("2010-08-01", "2008-01-01") 

dfa = pd.DataFrame(list(zip(nid1, date1, info1)),  columns =['nid', 'date', 'info']) 
dfb = pd.DataFrame(list(zip(nid2, date2)),  columns =['nid', 'date'])

每当有匹配的id时,我想将dfa中的日期变量更新为dfb中的数据变量。

我曾尝试将A转换为字典以取代,但运气不佳

dict_b = dfb.set_index('nid').to_dict()['date']
dfa["date"].replace(dict_b, inplace=True)

或者使用np.where

np.where(dfa["nid"].isin(dfb["nid"]), dfb["date"], dfa["date"])

有人能给我一个提示吗?

您可以使用combine_first:

print (dfb.set_index("nid").combine_first(dfa.set_index("nid")))
date info
nid                 
1    2010-08-01    b
3    2008-01-01    m
4    2011-03-15    d
8    2009-02-17    m

最新更新