首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅当值存在时,才将列中的值替换为vlookup另一个数据帧

仅当值存在时,才将列中的值替换为vlookup另一个数据帧
EN

Stack Overflow用户
提问于 2018-01-16 03:58:11
回答 5查看 3.1K关注 0票数 6

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

df1:

代码语言:javascript
复制
Name
Alex
Maria 
Marias
Pandas
Coala

df2:

代码语言:javascript
复制
Name1   Name2
Alex    Alexs
Marias  Maria
Coala   Coalas

预期结果:

代码语言:javascript
复制
Name
Alexs
Maria
Maria
Pandas
Coalas

我在网上尝试了几种解决方案,比如使用Map函数。通过在字典中转换df2,我使用了df1.Name = df1.Name.map(Dictionary),但这将导致所有值的nan都不在df2中,如下所示。

代码语言:javascript
复制
Name
Alexs
Maria
Maria
NAN
Coalas

我不确定如何使用IF语句来只替换df2中存在的那些,而将其余的保留为df1。我也尝试过用if语句创建一个函数,但是失败了。

我该如何解决这个问题?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-01-16 04:46:51

通过使用replace

代码语言:javascript
复制
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
票数 7
EN

Stack Overflow用户

发布于 2018-01-16 04:43:39

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

代码语言:javascript
复制
df1['Name'].map(df2.set_index('Name1')['Name2']).combine_first(df1['Name'])

输出:

代码语言:javascript
复制
0     Alexs
1     Maria
2     Maria
3    Pandas
4    Coalas
Name: Name, dtype: object
票数 4
EN

Stack Overflow用户

发布于 2018-01-16 04:19:03

Python dict.get()允许默认参数。因此,如果您构建了一个翻译字典,那么如果没有找到查找,那么很容易只返回原始值,如下所示:

代码:

代码语言:javascript
复制
translate = {x: y for x, y in df2[['Name1', 'Name2']].values}
new_names = [translate.get(x, x) for x in df1['Name']]

测试代码:

代码语言:javascript
复制
import pandas as pd

df1 = pd.DataFrame({'Name': ['Alex', 'Maria', 'Marias', 'Pandas', 'Coala']})
df2 = pd.DataFrame({'Name1': ['Alex', 'Marias', 'Coala'],
                    'Name2': ['Alexs', 'Maria', 'Coalas']})

print(df1)
print(df2)

translate = {x: y for x, y in df2[['Name1', 'Name2']].values}
print([translate.get(x, x) for x in df1['Name']])

测试结果:

代码语言:javascript
复制
     Name
0    Alex
1   Maria
2  Marias
3  Pandas
4   Coala

    Name1   Name2
0    Alex   Alexs
1  Marias   Maria
2   Coala  Coalas

['Alexs', 'Maria', 'Maria', 'Pandas', 'Coalas']
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48269844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档