【问题标题】:compare 2 data frames based on 3 columns and update second data基于 3 列比较 2 个数据框并更新第二个数据
【发布时间】:2020-03-21 09:55:03
【问题描述】:

这是我的数据框的样子。需要比较基础 if 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

【问题讨论】:

    标签: pandas apache-spark pyspark


    【解决方案1】:

    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 基于 midname 对齐 df1df2。两个pid 列重命名为pid_1pid_2
    • assign 通过合并前两个pids 创建一个新的pid 列:如果pid_1 可用,则使用它,如果没有,则保留原始pid_2
    • drop 删除 pid_1pid_2,只剩下一个 pid

    【讨论】:

      【解决方案2】:

      你可以试试:

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

      【讨论】:

        猜你喜欢
        • 2021-08-14
        • 2018-08-08
        • 1970-01-01
        • 2019-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-26
        • 2018-09-27
        相关资源
        最近更新 更多