Comment trouver les N valeurs minimales supérieures à partir du DataFrame, Python-3

9

J'ai ci-dessous Dataframe avec le champ 'Age', Besoins de trouver au top 3 l'âge minimum du DataFrame

DF = pd.DataFrame.from_dict({'Name':['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'], 'Age':[18, 45, 35, 70, 23, 24, 50, 65, 18, 23]})

DF['Age'].min()  

Vous voulez les deux meilleurs âges, c'est-à-dire 18, 23 dans la liste, comment y parvenir?

Remarque: DataFrame - DF contient des doublons d'âge, c'est-à-dire 18 et 23 répétés deux fois, ont besoin de valeurs uniques.

Espion
la source

Réponses:

14

Vous pouvez utiliser nsmallest(..)[pandas-doc] :

df.nsmallest(2, 'Age')

Pour les données d'échantillon données, cela nous donne:

>>> df.nsmallest(2, 'Age')
  Name  Age
0    A   18
4    E   23

Ou si vous n'avez besoin que de la valeur de la Agecolonne:

>>> df['Age'].nsmallest(2)
0    18
4    23
Name: Age, dtype: int64

ou vous pouvez l'envelopper dans une liste:

>>> df['Age'].nsmallest(2).to_list()
[18, 23]

Vous pouvez obtenir les n plus petites valeurs uniques , en construisant d'abord un Seriesavec des valeurs uniques:

>>> pd.Series(df['Age'].unique()).nsmallest(2)
0    18
4    23
dtype: int64
>>> df['Age'].drop_duplicates().nsmallest(2)
0    18
4    23
Name: Age, dtype: int64
Willem Van Onsem
la source
2
@SPy: vous pouvez également utiliser df['Age'].nsmallest(2):)
Willem Van Onsem
3

La bonne chose est d'utiliser nsmallest, ici je montre une autre façon: DataFrame.sort_values+DataFrame.head

df['Age'].sort_values().head(2).tolist()
#[18, 23]

MISE À JOUR

S'il y a des doublons , nous pourrions utiliser Series.drop_duplicatesprécédemment:

df['Age'].drop_duplicates().nsmallest(2).tolist()
#df['Age'].drop_duplicates().sort_values().head(2).tolist()
#[18, 23]

ou np.sort+np.unique

[*np.sort(df['Age'].unique())[:2]]
#[18, 23]
ansev
la source