Comment trouver la valeur la plus proche dans Pandas DataFrame (avec exemple)



Vous pouvez utiliser la syntaxe de base suivante pour rechercher la ligne dans un DataFrame pandas qui contient la valeur la plus proche d’une valeur spécifiée dans une colonne particulière :

#find row with closest value to 101 in points column
df_closest = df.iloc[(df['points']-101).abs().argsort()[:1]]

L’exemple suivant montre comment utiliser cette syntaxe dans la pratique.

Exemple : Rechercher la valeur la plus proche dans Pandas DataFrame

Supposons que nous ayons le DataFrame pandas suivant qui contient le nombre de points marqués par différentes équipes de basket-ball :

import pandas as pd

#create DataFrame
df = pd.DataFrame({'team': ['Mavs', 'Nets', 'Hawks', 'Kings', 'Spurs', 'Cavs'],
                   'points': [99, 100, 96, 104, 89, 93]})

#view DataFrame
print(df)

    team  points
0   Mavs      99
1   Nets     100
2  Hawks      96
3  Kings     104
4  Spurs      89
5   Cavs      93

Supposons maintenant que nous souhaitions sélectionner la ligne du DataFrame qui contient une valeur dans la colonne de points la plus proche de 101 .

Nous pouvons utiliser la syntaxe suivante pour ce faire :

#find row with closest value to 101 in points column
df_closest = df.iloc[(df['points']-101).abs().argsort()[:1]]

#view results
print(df_closest)

   team  points
1  Nets     100

À partir du résultat, nous pouvons voir que les Nets ont une valeur dans la colonne des points la plus proche de 101 .

Notez que nous pourrions également utiliser tolist() pour afficher uniquement la valeur la plus proche elle-même au lieu de la ligne entière dans le DataFrame pandas :

#display value closest to 101 in the points column
df_closest['points'].tolist()

[100]

Notez également que nous pouvons modifier la valeur après la fonction argsort() pour trouver plusieurs valeurs les plus proches.

Par exemple, nous pouvons utiliser la syntaxe suivante pour rechercher les lignes du DataFrame avec les 2 valeurs les plus proches de 101 dans la colonne des points :

#find rows with two closest values to 101 in points column
df_closest2 = df.iloc[(df['points']-101).abs().argsort()[:2]]

#view results
print(df_closest2)

   team  points
1  Nets     100
0  Mavs      99

À partir du résultat, nous pouvons voir que les Nets ont la valeur la plus proche de 101 dans la colonne des points , tandis que les Mavs ont la valeur la plus proche de 101 dans la colonne des points .

Ressources additionnelles

Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes chez les pandas :

Pandas : comment sélectionner des lignes en fonction des valeurs des colonnes
Pandas : comment combiner des lignes avec les mêmes valeurs de colonne
Pandas : comment supprimer toutes les lignes sauf certaines

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *