有效地合并熊猫中的多个数据框[重复]

Posted

技术标签:

【中文标题】有效地合并熊猫中的多个数据框[重复]【英文标题】:efficiently merge multiple dataframes in pandas [duplicate] 【发布时间】:2016-07-24 13:45:18 【问题描述】:

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

    pandas joining multiple dataframes on columns Pandas left outer join multiple dataframes on multiple columns

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

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

如果不是,那么仅使用公共索引创建一个新数据框并将每个数据框的原始数据传递给它会更有效吗?看起来这至少会阻止您在每个 N-1 连接中创建一个新的数据框。

谢谢。

【问题讨论】:

你打算如何加入他们?在索引上?内连接还是左/外连接? 【参考方案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 的时间比较,每个 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有点快

【讨论】:

以上是关于有效地合并熊猫中的多个数据框[重复]的主要内容,如果未能解决你的问题,请参考以下文章

熊猫有效地将groupby函数应用于每一列[重复]

如何合并两个熊猫数据框[重复]

合并两个数据框而不重复熊猫

数据框合并在熊猫(0.7.3)中创建重复记录

要合并的大文件。如何防止熊猫合并中的重复?

具有两个以上数据框的熊猫的外部合并[重复]