在pandas中高效合并多个数据框

3
什么是在pandas中合并多个数据框(即超过2个)的最有效方法?以下是几个答案:
  1. pandas joining multiple dataframes on columns
  2. Pandas left outer join multiple dataframes on multiple columns
但这些都涉及到多个连接。如果我有N个数据框,这将需要N-1个连接。
如果我不使用pandas,另一个解决方案是根据公共索引将所有内容放入哈希表中作为键,并构建最终版本。我认为这基本上就像SQL中的哈希连接。在pandas中是否有类似的东西?
如果没有,创建一个具有公共索引的新数据框并将每个数据框的原始数据传递给它是否更有效?看起来这至少可以防止您在N-1个连接中创建新数据框。
谢谢。

你要如何将它们连接起来?使用索引进行内连接还是左/外连接? - MaxU - stand with Ukraine
1个回答

4

如果您可以通过索引将数据框加入到一起,那么您可以在一个传送带上完成它:

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

每个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

所以你可以看到,join 比较快一些。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接