19 votes

renvoie les lignes d'un cadre de données les plus proches d'un nombre défini par l'utilisateur

J'ai un nombre défini par l'utilisateur que je veux comparer à une certaine colonne d'un tableau de données.

Je voudrais retourner les lignes d'un dataframe qui contiennent (dans une certaine colonne de df, disons, df.num) les 5 nombres les plus proches du nombre donné x.

Toute suggestion sur la meilleure façon de faire cela sans boucles serait grandement appréciée.

26voto

DSM Points 71975

Je pense que vous pouvez utiliser le argsort méthode :

>>> 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

4voto

Alex Points 836

Je suis un peu novice en matière de python et de pandas, mais je suggérerais ceci.

#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 contiendrait alors les emplacements d'index de la df originale pour les 5 numéros les plus proches. J'espère que cela vous aidera !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X