使用熊猫在数据框中进行条件替换

问题描述

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