问题描述
我对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)),'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