Возвращать строки в фрейме данных, ближайшем к определенному пользователем числу - программирование

Возвращать строки в фрейме данных, ближайшем к определенному пользователем числу

У меня есть пользовательский номер, который я хочу сравнить с определенным столбцом фрейма данных.

Я хотел бы вернуть строки данных, которые содержат (в определенном столбце df, скажем, df.num) 5 ближайших чисел к данному числу x.

Любые предложения по наилучшему способу сделать это без циклов будут очень признательны.

4b9b3361

Ответ 1

Я думаю, вы можете использовать метод 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

Ответ 2

Вид нового для 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 ближайших чисел. Надеюсь, это поможет!