基于多种条件连接两个pandas数据帧

2024-04-29 11:03:52 发布

您现在位置:Python中文网/ 问答频道 /正文

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']的唯一组合。

我试过进行外部连接,然后在final_df中删除w.r.t列A和B的重复项,但B_new的值不会被保留。

下面是我希望我的result_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的联合,这不是我想要的。

谢谢你的建议。


Tags: 数据appledfnewresultmergehowfinal
2条回答

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

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

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

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

相关问题 更多 >