根据3列比较2个数据帧并更新第二个数据

时间:2019-11-26 03:08:34

标签: pandas apache-spark pyspark

这是我的数据框。需要基于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

2 个答案:

答案 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根据df1df2对齐midname。两个pid列分别重命名为pid_1pid_2
  • assign通过组合前面的两个pid创建新的pid列:如果pid_1可用,请使用它,否则请保留原始的{{1 }}
  • pid_2放下droppid_1,仅留一列pid_2

答案 1 :(得分:0)

您可以尝试:

df3= df1.join(df2,on=['mid','name','pid'],how='right')