Ivo Merchier..
7
除了不能完全回答问题之外,这里讨论的其他算法的另一个缺点是它们必须对整个列表进行排序。这导致〜N log(N)的复杂性。
然而,也可以实现同样的结果〜n的。这种方法将数据帧分为两个子集,一个子集小于期望值。在较小的数据帧中,较低的邻居比最大值大,对于较高的邻居,反之亦然。
这给出了以下代码片段:
def find_neighbours(value):
exactmatch=df[df.num==value]
if !exactmatch.empty:
return exactmatch.index[0]
else:
lowerneighbour_ind = df[df.num
upperneighbour_ind = df[df.num>value].idxmin()
return lowerneighbour_ind, upperneighbour_ind
这种方法类似于在熊猫中使用分区,这在处理大型数据集时变得非常有用,而复杂性成为一个问题。
两种策略的比较表明,对于较大的N,分区策略的确更快。对于较小的N,排序策略将以更低的级别实现,因此效率更高。它也是单行代码,可能会提高代码的可读性。
复制此图的代码如下所示:
from matplotlib import pyplot as plt
import pandas
import numpy
import timeit
value=3
sizes=numpy.logspac