【问题标题】:How to do left join on several dataframe如何在多个数据框上进行左连接
【发布时间】:2018-11-11 09:22:28
【问题描述】:

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

这是数据框:

  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)

提前致谢!

【问题讨论】:

    标签: python pandas join left-join


    【解决方案1】:

    我相信您需要 left join mergecol1 列的 DataFrame 列表:

    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)
    

    【讨论】:

    • pd.concat([df1,df2, df3], axis=1)怎么样
    • @pygo - 它按索引对齐,而不是按列对齐 col1,所以不是
    • @jezrael 问题是我无法从数据帧中列出。他们太多了。它们的创建方式是使用 for 循环,它们没有单独的名称!
    • @user8034918 - 没问题,只是在循环中将数据追加到列表中。
    • 什么是data?我相信应该是dfs.append(i)。所以假设“df_new”是我正在使用的变量,我最初的帖子中的每个数据帧都被命名为df_new,因为我编写的代码导致了这个。我刚刚应用您的代码来创建数据框列表。生成的只是每个当前数据框下方的df_new 列的名称!这就是为什么我说创建数据框列表是主要问题
    猜你喜欢
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多