比较两个不同数据帧中的列以匹配值

2024-04-26 14:04:12 发布

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

下面是我的两个数据帧的样子:

DF1

NAME   EMAIL                ID
Mark   mark@gmail.com      8974
Sam    sam@gmail.com       9823
June   june@gmail.com      0972
David  david@gmail.com     2143

DF2

ID     ROLE-ID
2143      22
0972      34
8974      98
9823      54

我需要帮助做的是:

我需要比较两个数据帧的ID列,如果DF1中的ID与DF2的ID匹配,我需要用DF2中相应的ROLE-ID替换DF1中的ID列。你知道吗

输出如下所示:

更新的DF1

NAME   EMAIL               ROLE-ID
Mark   mark@gmail.com        98
Sam    sam@gmail.com         54
June   june@gmail.com        34
David  david@gmail.com       22

我正在使用Pandas库,并尝试了合并功能的条件,但它没有工作

    print(pd.merge(df1, df2, on=(df1['Id'] == df2[])))

Tags: 数据namecomidemailsamgmailrole
3条回答

您没有确切地说明如果找不到id或多次可用应该发生什么这可能不是100%您想要的。它会让你的身份证保持不变,但你猜,不然就是你想要的。你知道吗

import pandas as pd
import numpy as np

df1 = pd.DataFrame([[1,'a'],
                    [7,'b'],
                    [3,'e'],
                    [2,'c']], columns=['id', 'name'])

df2 = pd.DataFrame([[1,2],
                    [3,8],
                    [2,10]], columns=['id', 'role'])

# collect roles
roles = []
for id in df1.loc[:, 'id']:
    indices = df2.loc[:,'id'] == id
    if np.sum(indices) == 1:
        roles.append(df2.loc[indices, 'role'].iloc[0])
    else:
        # take id if role id is not given
        roles.append(id)  # could also be None if not wanted

# add role id col
df1.loc[:,'role-id'] = roles

# delete old id
del df1['id']

print(df1)

DF1型:

   id name
0   1    a
1   7    b
2   3    e
3   2    c

DF2型:

   id  role
0   1     2
1   3     8
2   2    10

输出

  name  role-id
0    a        2
1    b        7
2    e        8
3    c       10

尝试:

df = df1.merge(df2, on='ID', how='left')
df[['NAME', 'EMAIL', 'ROLE-ID']]

它给出了以下内容:

Screenshot

似乎是个merge问题

pd.merge(df2, df1, how='inner')

相关问题 更多 >