在Python中映射数据帧

2024-04-23 07:54:04 发布

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

我正在尝试用python将一个数据帧映射到另一个数据帧。这两个表是:

name    age   grade   code
Willard 20     88     2877
 Al     19     92     3000
Omar    22     95     3710
Spencer 21     70     4001
Abin    18     76     2338

以及:

sec.Code  sec.number 
2877       10003
1244       13772    
3000       98822
2338       11223    
4553       22996    

第一个表的“code”列和证券代码第二个表的引用了相同的内容,因此我要将“代码”映射到秒数如果第二个表中不存在代码,则填写相关消息。你知道吗

简单地说,我想创建一个最终的表,就像这样:

name    age  grade  code  sec.number
Willard 20    88    2877  10003
Al      19    92    3000  98822
Omar    22    95    3710  Not match
Spencer 21    70    4001  Not match
Abin    18    76    2338  11223

我对python没有太多经验,这就是我所尝试的:

for i in First_table['code']:
   for j in Second_table['sec.Code']:
    if i == j:
        First_table['sec_number'] = Second_table['sec.Code']
    else:
        First_table['sec_number'] = "Not match"

显然这不起作用。你能告诉我如何在迭代过程中给特定的单元格赋值吗?当然,如果有一个更有效和“聪明”的方法来做到这一点?你知道吗

谢谢


Tags: 数据代码namenumberagematchtablenot
1条回答
网友
1楼 · 发布于 2024-04-23 07:54:04

选项1 merge左上code,右上sec.Code

df1.merge(df2, left_on='code', right_on='sec.Code', how='left').drop(['sec.Code'], axis=1).fillna('Not match')

name       age  grade   code    sec.number
0   Willard 20  88      2877         10003
1   Al      19  92      3000         98822
2   Omar    22  95      3710     Not match
3   Spencer 21  70      4001     Not match
4   Abin    18  76      2338         11223

选项2
set_indexjoin

df1.set_index('code').join(df2.set_index('sec.Code')).reset_index().fillna('Not match')

    code    name    age grade   sec.number
0   2877    Willard 20  88           10003
1   3000    Al      19  92           98822
2   3710    Omar    22  95       Not match
3   4001    Spencer 21  70       Not match
4   2338    Abin    18  76           11223

相关问题 更多 >