如何在几个数据框上进行左联接

时间:2018-11-11 09:22:29

标签: python pandas join left-join

我有几个同名的数据框。每个数据帧都有一行和两列。一列在所有数据框中都是通用的。我想让他们在一起。假设数据帧的名称相同。我没有计划将它们的名称彼此不同,因为它们的名称太多了,我只是将其中的一些放在这里。有什么办法可以让我加入他们并生成下面提到的所需输出?

以下是数据框:

  col1     col2_4
0  1         2

  col1      col2_9
0  1         10

  col1     col2_1
0   1         12

   col1    col2_3
0    1        5

输出:

   col1     col2_4    col2_9   col2_1   col_3
0     1        2         10       12       5

代码:

group = df.groupby([randomcolumnname])
for name, groups in group:
     #do some stuff for groups
     print(groups)
     #I want to join the groups dataframes after this line(some groups dataframes are given above)

谢谢!

1 个答案:

答案 0 :(得分:0)

我相信您需要left join merge,并按col1列列出DataFrames:

dfs = [df1, df2, df3, df4]

from functools import reduce

df = df_final = reduce(lambda left,right: pd.merge(left,right,on='col1', how='left'), dfs)
print (df)
   col1  col2_1  col2_2  col2_3  col2_4
0     1       2      10      12       5

或者为outer join通过set_indexconcat创建索引:

df = pd.concat([x.set_index('col1') for x in dfs], axis=1).reset_index()
print (df)
   col1  col2_1  col2_2  col2_3  col2_4
0     1       2      10      12       5

编辑:

我认为最好将自定义函数与GroupBy.apply结合使用:

def func(x):
    print (x)
    #do some stuff for groups

    return x


group = df.groupby([randomcolumnname]).apply(func)

如果不可能,则不使用DataFrames:

dfs = []
group = df.groupby([randomcolumnname])
for name, groups in group:
     #do some stuff for groups

     print(groups)
     dfs.append(groups)