首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何比较列上的两个数据帧并替换为其他列值

如何比较列上的两个数据帧并替换为其他列值
EN

Stack Overflow用户
提问于 2018-08-22 22:46:08
回答 2查看 1.2K关注 0票数 1

我有两个数据帧,分别是df1和df2

代码语言:javascript
复制
id      first       last  size
  A 1978-01-01 1979-01-01     2
  B 2000-01-01 2000-01-01     1
  C 1998-01-01 2000-01-01     3
  D 1998-01-01 1998-01-01     1
  E 1999-01-01 2000-01-01     2

  id  token       
  A     ZA.00 
  B     As.11
  C     SD.34

输出

代码语言:javascript
复制
id          first       last        size
  ZA.00     1978-01-01 1979-01-01     2
  As.11     2000-01-01 2000-01-01     1
  SD.34     1998-01-01 2000-01-01     3
  D         1998-01-01 1998-01-01     1
  E         1999-01-01 2000-01-01     2

如果df1 id存在于df2中,则令牌值将设置df1 id值。我如何才能做到这一点。

EN

回答 2

Stack Overflow用户

发布于 2018-08-23 04:16:38

使用mapfillna

代码语言:javascript
复制
df1['id'] = df1['id'].map(df2.set_index('id')['token']).fillna(df1['id'])
df1

输出:

代码语言:javascript
复制
      id       first        last  size
0  ZA.00  1978-01-01  1979-01-01     2
1  As.11  2000-01-01  2000-01-01     1
2  SD.34  1998-01-01  2000-01-01     3
3      D  1998-01-01  1998-01-01     1
4      E  1999-01-01  2000-01-01     2

您可以将map与序列一起用作参数。

票数 1
EN

Stack Overflow用户

发布于 2018-08-23 04:10:49

如果你不想合并你的DataFrame,你可以使用apply函数来解决这个问题。将您的小DataFrame更改为字典,并将其映射到其他DataFrame。

代码语言:javascript
复制
from io import StringIO #used to get string to df

import pandas as pd

id_ =list('ABC')
token = 'ZA.00 As.11 SD.34'.split()
dt = pd.DataFrame(list(zip(id_,token)),columns=['id','token'])

a ='''
id first last size
A 1978-01-01 1979-01-01 2
B 2000-01-01 2000-01-01 1
C 1998-01-01 2000-01-01 3
D 1998-01-01 1998-01-01 1
E 1999-01-01 2000-01-01 2
'''

df =pd.read_csv(StringIO(a), sep=' ')

# This last two lines are all you need
mp= {x:y for x,y in zip(dt.id.tolist(),dt.token.tolist())}

df.id.apply(lambda x: mp[x] if x in mp.keys() else x)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51969476

复制
相关文章

相似问题

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