仅当列中的值存在时,用vlookup替换另一个数据帧

2024-03-28 10:36:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我想基于(df2.Name1, df2.Name2)中的映射表重写我的df1.Name值。但是,df1.Name中的所有值都存在于df2.Name1

df1:

Name
Alex
Maria 
Marias
Pandas
Coala

df2:

^{pr2}$

预期结果:

Name
Alexs
Maria
Maria
Pandas
Coalas

我在网上尝试过几种解决方案,比如使用地图功能。通过在字典中转动df2,我使用的是df1.Name = df1.Name.map(Dictionary),但这将导致nan中没有的所有值,如下所示。在

Name
Alexs
Maria
Maria
NAN
Coalas

我不知道如何使用IF语句来只替换df2中存在的那些语句,并按照df1保留其余语句。 我还试图用if语句创建一个函数,但是失败了。在

我如何解决这个问题?在


Tags: namecoalapandas语句解决方案df1df2alex
3条回答

您也可以使用merge

In [27]: df1['Name'] = df1.merge(df2.rename(columns={'Name1':'Name'}), how='left') \
                          .ffill(axis=1)['Name2']

In [28]: df1
Out[28]:
     Name
0   Alexs
1   Maria
2   Maria
3  Pandas
4  Coalas

通过使用replace

df1.Name.replace(df2.set_index('Name1').Name2.to_dict())
Out[437]: 
0     Alexs
1     Maria
2     Maria
3    Pandas
4    Coalas
Name: Name, dtype: object

让我们使用带有mapcombine_first的Pandas解决方案:

df1['Name'].map(df2.set_index('Name1')['Name2']).combine_first(df1['Name'])

输出:

^{pr2}$

相关问题 更多 >