Python 高效地合并熊猫中的多个数据帧

Python 高效地合并熊猫中的多个数据帧,python,pandas,Python,Pandas,在pandas中合并多个数据帧(即多于2个)的最有效方法是什么?有几个答案: 但这些都涉及多个连接。如果我有N个数据帧,这些将需要N-1个连接 如果我没有使用pandas,另一个解决方案是将所有内容放入一个哈希表中,该哈希表基于公共索引作为键,并构建最终版本。我相信这基本上就像SQL中的散列连接。熊猫身上有类似的东西吗 如果不是,只使用公共索引创建一个新的数据帧并将每个数据帧中的原始数据传递给它会更有效吗?这似乎至少会阻止您在每个N-1连接中创建新的数据帧 谢谢。如果您可以通过索引加入数据帧

在pandas中合并多个数据帧(即多于2个)的最有效方法是什么?有几个答案:

  • 但这些都涉及多个连接。如果我有N个数据帧,这些将需要N-1个连接

    如果我没有使用pandas,另一个解决方案是将所有内容放入一个哈希表中,该哈希表基于公共索引作为键,并构建最终版本。我相信这基本上就像SQL中的散列连接。熊猫身上有类似的东西吗

    如果不是,只使用公共索引创建一个新的数据帧并将每个数据帧中的原始数据传递给它会更有效吗?这似乎至少会阻止您在每个N-1连接中创建新的数据帧


    谢谢。

    如果您可以通过索引加入数据帧,您可以在一个传送带中完成:

    df1.join(df2).join(df3).join(df4)
    
    例如:

    In [187]: df1
    Out[187]:
       a  b
    0  5  2
    1  6  7
    2  6  5
    3  1  6
    4  0  2
    
    In [188]: df2
    Out[188]:
       c  d
    0  5  7
    1  5  5
    2  2  4
    3  4  3
    4  9  0
    
    In [189]: df3
    Out[189]:
       e  f
    0  8  1
    1  0  9
    2  4  5
    3  3  9
    4  9  5
    
    In [190]: df1.join(df2).join(df3)
    Out[190]:
       a  b  c  d  e  f
    0  5  2  5  7  8  1
    1  6  7  5  5  0  9
    2  6  5  2  4  4  5
    3  1  6  4  3  3  9
    4  0  2  9  0  9  5
    
    它应该是非常快速和有效的

    或者,您可以将它们连接起来:

    In [191]: pd.concat([df1,df2,df3], axis=1)
    Out[191]:
       a  b  c  d  e  f
    0  5  2  5  7  8  1
    1  6  7  5  5  0  9
    2  6  5  2  4  4  5
    3  1  6  4  3  3  9
    4  0  2  9  0  9  5
    
    3个DF的时间比较,每个DF有100K行:

    In [198]: %timeit pd.concat([df1,df2,df3], axis=1)
    100 loops, best of 3: 5.67 ms per loop
    
    In [199]: %timeit df1.join(df2).join(df3)
    100 loops, best of 3: 3.93 ms per loop
    

    因此,正如您所看到的那样,
    加入
    要快一点

    您将如何加入他们?在索引上?内连接还是左/外连接?