我对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