为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

噜噜哒 2021-05-06 16:13:08
我正在尝试合并一些数据,但无法获得我一直在寻找的结果。我有两个带有两列的数据框: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')这似乎是合并数据框而不合并数据(它只是在末尾添加一列)任何帮助将不胜感激。谢谢你。
查看完整描述

2 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

在您的情况下,当联接的左表和右表都具有不属于合并键(“ CID”)的相同数据列(“名义”)时,合并函数中没有方法可以确定哪个用于名义的价值。


您可以再添加一行代码来解决此问题。


import pandas as pd

import numpy as np


# make the data

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

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


# merge the data

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


# If Notional from df2 was not missing,  then use it,  else use df1's Notional

test['Notional'] = np.where(test['Notional_y'].isna(), test['Notional_x'], test['Notional_y'])

然后,您可以从数据框中删除Notional_x和Notional_y,保留新创建的Notional。

//img1.sycdn.imooc.com//609a3b8c0001ac9d04020170.jpg

查看完整回答
反对 回复 2021-05-11
?
临摹微笑

TA贡献1982条经验 获得超2个赞

试试这个。


import pandas as pd

import numpy as np


df1 = 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)


查看完整回答
反对 回复 2021-05-11
  • 2 回答
  • 0 关注
  • 409 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信