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

2024-05-18 10:08:46 发布

您现在位置:Python中文网/ 问答频道 /正文

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

  1. pandas joining multiple dataframes on columns
  2. Pandas left outer join multiple dataframes on multiple columns

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

如果我不使用pandas,另一个解决方案是将所有内容都放在一个散列表中,以公共索引作为键,并构建最终版本。这基本上就像SQL中的散列连接。熊猫身上有这种东西吗?

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

谢谢。


Tags: columns数据方法答案内容pandason解决方案
1条回答
网友
1楼 · 发布于 2024-05-18 10:08:46

如果可以通过索引连接数据帧,则可以在一个传送带中进行:

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要快一点

相关问题 更多 >