返回最接近用户定义数字的数据框中的行

时间:2013-07-20 02:18:41

标签: python python-2.7 pandas

我有一个用户定义的号码,我想与数据帧的某一列进行比较。

我想返回一个数据帧的行,它包含(在df的某一列中,比如df.num)与给定数字x最接近的5个数字。

对于没有循环的最佳方法的任何建议将不胜感激。

2 个答案:

答案 0 :(得分:26)

我认为你可以使用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

答案 1 :(得分:4)

对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个最接近的数字。希望这有帮助!