首页 > 解决方案 > 基于多个条件加入两个熊猫数据框

问题描述

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  

我希望 myfinal_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

我也试过左外连接:

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

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

感谢任何建议。

标签: pythonpandasdataframemerge

解决方案


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

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

推荐阅读