我有一个用户定义的数字,我想将其与数据框的某一列进行比较。
我想返回一个数据帧的行,其中包含(在 df 的某一列中,比如 df.num)与给定数字 x 最接近的 5 个数字。
任何关于没有循环的最佳方法的建议将不胜感激。
我有一个用户定义的数字,我想将其与数据框的某一列进行比较。
我想返回一个数据帧的行,其中包含(在 df 的某一列中,比如 df.num)与给定数字 x 最接近的 5 个数字。
任何关于没有循环的最佳方法的建议将不胜感激。
我认为您可以使用以下argsort
方法:
>>> df = pd.DataFrame({"A": 1e4*np.arange(100), "num": np.random.random(100)})
>>> x = 0.75
>>> df.ix[(df.num-x).abs().argsort()[:5]]
A num
66 660000 0.748261
92 920000 0.754911
59 590000 0.764449
27 270000 0.765633
82 820000 0.732601
>>> x = 0.33
>>> df.ix[(df.num-x).abs().argsort()[:5]]
A num
37 370000 0.327928
76 760000 0.327921
8 80000 0.326528
17 170000 0.334702
96 960000 0.324516
对 python 和 pandas 来说有点新,但我建议这样做。
#make random df and get number
df = pd.DataFrame({'c1':0,'c2':np.random.random(100)})
x = .25
#find differences and sort
diff = df.c2.apply(lambda z: abs(x-z))
diff.sort()
#get the index for the 5 closest numbers
inds = diff.index[:5]
inds
然后将具有来自原始 df 的 5 个最接近数字的索引位置。希望这可以帮助!