使用Python,如何合并两列并仅在另一列中存在数据的情况下才覆盖一列中的数据?

我正在尝试合并一些数据,但无法获得我一直在寻找的结果。我有两个带有两列的数据框:CID和名义。DF1具有每个CID,而DF2仅具有一些CID。我想获取DF2的数据并将其与DF1合并,以便如果DF2的数据存在,它将覆盖DF1,否则,DF1将保留其数据。


我尝试过使用pd.merge,最后得到一个DataFrame,其中包含CID,Notional_X,Notional_Y列;我尝试了“更新”,但它只是替换了所有旧的DataFrame数据。


这是我要寻找的示例:


#Example of Data (couldn't find a better way to explain this)

df1 = pd.DataFrame({'CID':[1,25,100], 'Notional': [1000, 2500, 5500]})

df2 = pd.DataFrame({'CID':[25], 'Notional': [0]})

输出将返回一个如下所示的DataFrame:


pd.DataFrame({'CID': [1,25,100], 'Notional': [1000,0,5500]})

(不是合并将df2中的CID 25降低为0,而未进行其他任何更改)


该文档建议“合并”应该完成它,但是……不应该。


test = df1.merge(df1, df2, how = 'left', on = 'CID')

这似乎是合并数据框而不合并数据(它只是在末尾添加一列)


任何帮助将不胜感激。谢谢你。


噜噜哒
浏览 410回答 2
2回答

烙印99

在您的情况下,当联接的左表和右表都具有不属于合并键(“ CID”)的相同数据列(“名义”)时,合并函数中没有方法可以确定哪个用于名义的价值。您可以再添加一行代码来解决此问题。import pandas as pdimport numpy as np# make the datadf1 = pd.DataFrame({'CID':[1,25,100], 'Notional': [1000, 2500, 5500]})df2 = pd.DataFrame({'CID':[25], 'Notional': [0]})# merge the datatest = df1.merge(df2, how='left', on='CID')# If Notional from df2 was not missing,  then use it,  else use df1's Notionaltest['Notional'] = np.where(test['Notional_y'].isna(), test['Notional_x'], test['Notional_y'])然后,您可以从数据框中删除Notional_x和Notional_y,保留新创建的Notional。

临摹微笑

试试这个。import pandas as pdimport numpy as npdf1 = pd.DataFrame({'CID':[1,25,100], 'Notional': [1000, 2500, 5500]})df2 = pd.DataFrame({'CID':[25], 'Notional2': [0]})df=pd.merge(df1,df2,how='left')df['Notional'] = np.where(df['Notional2'].isna(),df['Notional'],df['Notional2'])df.drop('Notional2',axis=1)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python