python - 基于多个条件加入两个 Pandas 数据框

标签 python pandas dataframe merge

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看起来像:

结果_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_a 的并集和 df_b这不是我想要的。

感谢任何建议。

最佳答案

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

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

关于python - 基于多个条件加入两个 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53549492/

相关文章:

python - pandas - 通过添加另一个级别来扩展 DataFrame

相当于 R 函数 sweep() 的 Python numpy 或 pandas

python - 如何根据任一列中的 2 个变量删除数据框中的行

python - Pandas 删除不在标签中的行

python - 使用 pandas,从长格式 df 中提取数据并将其添加到宽格式 df

python - 如何将Python pandas数据保存到Excel文件中?

python - 使用函数调用设置实例变量的正确方法是什么

pandas - 在 groupby 之后获取与另一列中的值相对应的一列中的值

python - 减去两个索引不重叠的 DataFrame

Python 线程在 join 后没有关闭