这是我的数据框。需要基于df1.mid = df2.mid&df1.name = df2.name&df1.pid!= df2.pid进行比较,然后使用df1.pid更新df2.pid。
df1
mid pid name
1 2 John
2 14 Peter
3 16 Emma
4 20 Adam
df2
mid pid name
1 2 John
2 16 Peter
3 16 Emma
更新后在df2中的预期结果
mid pid name
1 2 John
2 14 Peter
3 16 Emma
答案 0 :(得分:2)
merge
是您想要的,但是要考虑一些技巧:
df2.merge(df1, on=['mid', 'name'], how='left', suffixes=('_2', '_1')) \
.assign(pid=lambda x: x['pid_1'].combine_first(x['pid_2'])) \
.drop(columns=['pid_1', 'pid_2'])
merge
根据df1
和df2
对齐mid
和name
。两个pid
列分别重命名为pid_1
和pid_2
。assign
通过组合前面的两个pid
创建新的pid
列:如果pid_1
可用,请使用它,否则请保留原始的{{1 }} pid_2
放下drop
和pid_1
,仅留一列pid_2
列答案 1 :(得分:0)
您可以尝试:
df3= df1.join(df2,on=['mid','name','pid'],how='right')