首页 > 解决方案 > 合并不同列上的多个数据框

问题描述

使用熊猫 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 我想将它们全部连接在一起

  1. df_a, df_b 共享列“B”因此他们加入列“B”
  2. 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有多个问题,但是找不到我的问题的解决方案。

标签: pythonpandasmerge

解决方案


您可以删除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)

推荐阅读