So finden Sie die Top-N-Mindestwerte im DataFrame Python-3

9

Ich habe unten Datenrahmen mit Feld 'Alter', Bedürfnisse finden, um Top 3 Mindestalter aus dem Datenrahmen

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

Willst du Top zwei Alter dh 18, 23 in Liste, Wie erreicht man das?

Hinweis: DataFrame - DF enthält Altersduplikate, dh 18 und 23, die zweimal wiederholt werden, benötigen eindeutige Werte.

Spion
quelle

Antworten:

14

Sie können nsmallest(..)[pandas-doc] verwenden :

df.nsmallest(2, 'Age')

Für die angegebenen Beispieldaten ergibt dies:

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

Oder wenn Sie nur den Wert der AgeSpalte benötigen :

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

oder Sie können es in eine Liste einschließen:

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

Sie können die n kleinsten eindeutigen Werte erhalten, indem Sie zuerst a Seriesmit eindeutigen Werten erstellen:

>>> 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
quelle
2
@SPy: Sie können auch nutzen df['Age'].nsmallest(2):)
Willem Van Onsem
3

Das Richtige ist zu verwenden nsmallest, hier zeige ich einen anderen Weg: DataFrame.sort_values+DataFrame.head

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

AKTUALISIERT

Wenn es Duplikate gibt , könnten wir Series.drop_duplicatesvorher verwenden:

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

oder np.sort+np.unique

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