python - 合并不同列上的多个数据框
问题描述
使用熊猫 1.2.1
MRE:
df_a = pd.DataFrame({"A":[1,2,3,4], "B":[33, 44, 55, 66]})
df_b = pd.DataFrame({"B":[33, 44,99], "C":["v", "z", "z"]})
df_c = pd.DataFrame({"A":[3,4,77,55], "D":["aa", "bb", "cc", "dd"]})
使用上面创建的三个 dfs 我想将它们全部连接在一起
- df_a, df_b 共享列“B”因此他们加入列“B”
- df_a, df_c 共享列“A”,因此他们加入列“A”
我想left_join df_b 和df_c 到df_a。目前这是我的方法:
merged_df = pd.merge(df_a, df_b, on=["B"], how="left")
merged_df = pd.merge(merged_df, df_c, on=["A"], how="left")
我知道工作正常,但是我不能停下来认为有一种更简单快捷的方法,使用reduce函数在同一列上加入多个dfs有多个问题,但是找不到我的问题的解决方案。
解决方案
您可以删除on
参数,因此它通过 DataFrames 之间的列名称的交集进行合并:
merged_df = pd.merge(df_a, df_b, how="left")
merged_df = pd.merge(merged_df, df_c, how="left")
更动态的是 use reduce
,也被去掉了on
参数:
from functools import reduce
dfList = [df1, df2, df3]
df = reduce(lambda df1,df2: pd.merge(df1,df2,how="left"), dfList)
推荐阅读
- javascript - Gaugejs 与 taiko 对数据表有意外行为
- python - 如何有效地应用条件字符串方法将数据框列一分为二?
- android - 如何为 RatingBar 创建自定义弧视图?
- html - 控制器和函数如何使用 .emit 在两个单独的文件之间进行通信,以及如何在 AngularJS 中告诉控制器层次结构?
- sql-server - 在查询日期之间没有按我的意愿工作
- neo4j - 获取 Neo.ClientError.Statement.SemanticError:无法使用空属性合并节点
- recaptcha - 我如何找到 Google ReCaptcha V2 回调函数名称
- html - 合并 HTML 输入?
- java - 如何在从文件读取的每个字节后添加逗号并将字节和逗号写入另一个文件?
- react-native - 只有 Android 用户在 createuserwithemailandpassword 上收到此错误