Python Pandas多条件分配

梦想

我有两个熊猫数据框。一个是来源,另一个是目的地。我想基于多个条件更新两个数据帧的值。源数据帧如下所示:

     Old_ID    New_ID   DATE      dt_insert
     FIRM345   FIRM21   21.11.19  11.11.19
     FIRM321   FIRM41   19.10.19  18.10.19

目标数据框如下所示

     Old_ID    New_ID   DATE     
     FIRM345   FIRM21   21.11.19
     FIRM321   FIRM41   19.10.19

我想知道是否有一种方法可以在不使用循环的情况下应用以下逻辑:

如果src.old_ID == dest.old_id AND src.new_id == dest.new_id AND src.date == dest.date

然后dest.dt_insert = src.date

ELSE将src行附加到目标数据帧

爱德华·伊利亚索夫

您可以使用以下方法解决您的问题:

  1. 具有多个键(Old_ID,New_ID,DATE)上的源数据帧的外部联接目标数据帧;
  2. 如果在两个数据框中都找到了观察的合并键,则dt_insert列中的值替换列中的值DATE
  3. 删除辅助列_merge

    import pandas as pd
    
    src_data = [{'Old_ID': 'FIRM345', 'New_ID': 'FIRM21', 'DATE': '21.11.19', 'dt_insert': '11.11.19'},
                {'Old_ID': 'FIRM321', 'New_ID': 'FIRM41', 'DATE': '19.10.19', 'dt_insert': '18.10.19'},
                {'Old_ID': 'FIRM333', 'New_ID': 'FIRM31', 'DATE': '20.10.19', 'dt_insert': '20.10.19'}]
    
    dest_data = [{'Old_ID': 'FIRM345', 'New_ID': 'FIRM21', 'DATE': '21.11.19'},
                 {'Old_ID': 'FIRM321', 'New_ID': 'FIRM41', 'DATE': '19.10.19'}]
    
    df_src = pd.DataFrame(src_data)
    print(df_src)
    
    #        DATE  New_ID   Old_ID dt_insert
    # 0  21.11.19  FIRM21  FIRM345  11.11.19
    # 1  19.10.19  FIRM41  FIRM321  18.10.19
    # 2  20.10.19  FIRM31  FIRM333  20.10.19
    
    df_dest = pd.DataFrame(dest_data)
    print(df_dest)
    
    #        DATE  New_ID   Old_ID
    # 0  21.11.19  FIRM21  FIRM345
    # 1  19.10.19  FIRM41  FIRM321
    
    df_dest_new = pd.merge(left=df_dest, right=df_src, how='outer', 
                           on=['Old_ID', 'New_ID', 'DATE'], indicator=True)
    df_dest_new['dt_insert'] = df_dest_new[['DATE', 'dt_insert', '_merge']].apply(lambda x: x[0] if x[2] == 'both' else x[1], axis=1)
    df_dest_new = df_dest_new.drop(labels='_merge', axis=1)
    print(df_dest_new)
    
    #        DATE  New_ID   Old_ID dt_insert
    # 0  21.11.19  FIRM21  FIRM345  21.11.19
    # 1  19.10.19  FIRM41  FIRM321  19.10.19
    # 2  20.10.19  FIRM31  FIRM333  20.10.19
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章