我正在处理两个数据框df1
和df2
。
我用了代码:
df1.index.searchsorted(df2.index)
但我不确定它是如何运作的。 有人可以解释我怎么样?
答案 0 :(得分:9)
该方法将binary search应用于索引。这是一个众所周知的算法,它使用的值是已按排序顺序排列,以便在尽可能少的步骤中查找插入索引。
二进制搜索的工作原理是选择值的中间元素,然后将其与搜索到的值进行比较;如果该值低于该中间元素,则将搜索范围缩小到上半部分,或者如果它更大则查看后半部分。
这样,您可以减少查找元素所需的步骤数最多索引长度的日志。 1000个元素,少于7个步骤,100万个元素,少于14个等等。
插入索引是添加值以保持索引按排序顺序的位置; left
位置恰好也是匹配值的索引,因此您也可以使用它来查找插入缺失值或重复值的位置,并测试给定值是否为出现在索引中。
pandas实现基本上是numpy.sortedsearch()
函数,它使用generated C code来优化对不同对象类型的搜索,挤出每一个最后一滴速度。
Pandas在各种索引实现中使用该方法来确保快速操作。您通常不会使用此方法来测试索引中是否存在值,例如,因为Pandas索引已经为您实现了有效的__contains__
方法,通常基于searchsorted()
说得通。有关此类示例,请参阅DateTimeEngine.__contains__()
。