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

时间:2019-08-28 22:48:09

标签: python python-3.x pandas numpy dataframe

这是我的两个数据框的样子:

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[])))

3 个答案:

答案 0 :(得分:0)

尝试:

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

它提供了以下内容:

Screenshot

答案 1 :(得分:0)

您没有确切说明如果没有找到ID或多次使用ID会发生什么,这可能不是您想要的100%。这样一来,ID便会保持不变。否则,请猜测是否是您想要的。

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

答案 2 :(得分:-1)

好像是一个merge问题

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