这是我的两个数据框的样子:
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[])))
答案 0 :(得分:0)
答案 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')