【问题标题】:Joining two pandas dataframes based on multiple conditions根据多个条件加入两个熊猫数据框
【发布时间】:2019-05-02 03:13:37
【问题描述】:

df_adf_b 是两个数据帧,如下所示

df_a
A   B       C      D     E
x1  Apple   0.3   0.9    0.6
x1  Orange  0.1   0.5    0.2
x2  Apple   0.2   0.2    0.1
x2  Orange  0.3   0.4    0.9
x2  Mango   0.1   0.2    0.3
x3  Orange  0.3   0.1    0.2


df_b
A   B_new   F    
x1  Apple   0.3  
x1  Mango   0.2  
x1  Orange  0.1   
x2  Apple   0.2   
x2  Orange  0.3     
x2  Mango   0.1  
x3  Orange  0.3  
x3  Mango   0.2  
x3  Apple   0.1  

我希望我的final_df 包含df_a 中包含的所有行,以便考虑df_a['A'] == df_b['A']df_a['B'] == df_b['B_new'] 的独特组合。

我已尝试进行外部联接,然后删除重复的 w.r.t 列 A 和 B 到 final_df,但 B_new 的值没有保留。

以下是我希望我的result_df 的样子:

结果_df

 A   B       C      D     E   B_new  F
x1  Apple   0.3   0.9    0.6  Apple  0.3
x1  Orange  0.1   0.5    0.2  Orange 0.1
x2  Apple   0.2   0.2    0.1  Apple   0.2 
x2  Orange  0.3   0.4    0.9  Orange  0.3
x2  Mango   0.1   0.2    0.3  Mango   0.1
x3  Orange  0.3   0.1    0.2  Orange  0.3

我也试过左外连接:

final_df = pd.merge(df_a, df_b, how="left", on=['A'])

这个数据框的大小是df_adf_b 的联合,这不是我想要的。

感谢任何建议。

【问题讨论】:

    标签: python pandas dataframe merge


    【解决方案1】:

    您需要一个内部合并,在每种情况下指定两个合并列:

    res = df_a.merge(df_b, how='inner', left_on=['A', 'B'], right_on=['A', 'B_new'])
    
    print(res)
    
        A       B    C    D    E   B_new    F
    0  x1   Apple  0.3  0.9  0.6   Apple  0.3
    1  x1  Orange  0.1  0.5  0.2  Orange  0.1
    2  x2   Apple  0.2  0.2  0.1   Apple  0.2
    3  x2  Orange  0.3  0.4  0.9  Orange  0.3
    4  x2   Mango  0.1  0.2  0.3   Mango  0.1
    5  x3  Orange  0.3  0.1  0.2  Orange  0.3
    

    【讨论】:

      【解决方案2】:

      您仍然可以通过非常理想的左连接来实现这一点。
      见下文:

      final_df = pd.merge(df_a, df_b[['A', 'B_new','F']], how="left", left_on=['A', 'B'], right_on=['A', 'B_new']);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-17
        • 1970-01-01
        • 1970-01-01
        • 2016-12-30
        • 1970-01-01
        • 2019-08-29
        • 1970-01-01
        • 2019-07-31
        相关资源
        最近更新 更多