基于多个条件加入两个熊猫数据框

ipr*_*214 11 python merge dataframe pandas

df_a并且df_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  
Run Code Online (Sandbox Code Playgroud)

我希望我的final_df包含包含在所有的行df_a,使得它设想的独特组合df_a['A'] == df_b['A']df_a['B'] == df_b['B_new']

我试过做外连接,然后删除重复的 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
Run Code Online (Sandbox Code Playgroud)

我也试过左外连接:

final_df = pd.merge(df_a, df_b, how="left", on=['A'])
Run Code Online (Sandbox Code Playgroud)

此数据框的大小是df_a和 的并集,df_b这不是我想要的。

感谢任何建议。

jpp*_*jpp 14

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

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
Run Code Online (Sandbox Code Playgroud)