Python 有没有一种有效的方法来合并熊猫中的两个排序数据帧,以保持排序性?

Python 有没有一种有效的方法来合并熊猫中的两个排序数据帧,以保持排序性?,python,numpy,pandas,Python,Numpy,Pandas,如果我有两个数据帧(或序列),它们已经在兼容的键上排序,我希望能够廉价地将它们合并在一起并保持排序性。除了通过concat()和explicit sort()之外,我找不到其他方法来实现这一点 看起来有一些关于numpy数组的相关讨论,建议使用“交错”方法,但我没有找到一个好的答案。如果我们将问题限制在只有一列的a和b,那么我将通过以下路径: s = a.merge(b, how='outer', left_index=True, right_index=True) s.stack().rese

如果我有两个数据帧(或序列),它们已经在兼容的键上排序,我希望能够廉价地将它们合并在一起并保持排序性。除了通过concat()和explicit sort()之外,我找不到其他方法来实现这一点


看起来有一些关于numpy数组的相关讨论,建议使用“交错”方法,但我没有找到一个好的答案。

如果我们将问题限制在只有一列的
a
b
,那么我将通过以下路径:

s = a.merge(b, how='outer', left_index=True, right_index=True)
s.stack().reset_index(level=1, drop=True)

好问题!Interweave不同于对两个已经排序的数组进行排序,但我确信我看到了一个关于在numpy中对两个已经排序的数组进行排序的问题(我找不到它)。。。它必须是mergesort实现的一部分…:我喜欢那里的命令中的heapq.merge()建议,也许我可以使用它,但它看起来不像是一个原生的numpy东西?我想利用排序的优势,因为对于非常大的序列合并,当我们知道它被排序时,它在数组的总长度上应该是线性的,而任何排序都是非线性的。(具有讽刺意味的是,当我开始使用pandas时,我假设“merge”操作就是这样做的,而不是作为连接的一种形式。)我认为您想要做的是使用
排序(sort)索引
(如果我理解了公认的答案)的mergesort,但这似乎不是一个选项。。。然而,帕特里克苏里“任何种类都是非线性的”,这绝对是错误的。当我们说排序是Ω(nlogn)时,我们指的是平均和最坏情况。在您的例子中,调用本机的
list.sort
方法将花费线性时间,因为Timsort非常擅长处理部分排序的数据。
s = a.merge(b, how='outer', left_index=True, right_index=True)
s.stack().reset_index(level=1, drop=True)