python - 基于多个条件加入两个熊猫数据框
问题描述
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_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
推荐阅读
- apache-spark - 如何获取将在 Pyspark Dataframe 中为我提供唯一记录的列列表
- python - 我真的需要这么多隐藏的导入标志吗?
- python - 返回 Panel 的滑块小部件的值
- python - 为什么当我试图消除路径上的塔时,塔防路径都是乱七八糟的?
- java - 当我尝试在 Android 应用程序中使用 Javers 时,模块中的重复类错误
- oracle-sqldeveloper - 如何在 Oracle SQL 开发人员的窗口中显示保存的 SQL 查询
- php - 在 php-fpm docker 映像上更改为 pm = static
- vba - 嵌套 iif() 语句“太复杂”,无法在 MS Access 中运行
- sql-server - SQL Server:提高性能的文本搜索模式
- internationalization - 如何从相应的语言环境属性文件中加载所有属性