Jak znaleźć najwyższe N ​​minimalnych wartości z DataFrame, Python-3


9

Mam poniżej Dataframe z polem „Age”, Potrzebuję znaleźć do góry 3 minimalny wiek z 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()  

Chcesz znaleźć dwie najlepsze osoby, tj. 18, 23 lat na liście, Jak to osiągnąć?

Uwaga: DataFrame - DF zawiera duplikaty wiekowe, tj. 18 i 23 powtórzone dwukrotnie, wymagają unikalnych wartości.

Odpowiedzi:


14

Możesz skorzystać z nsmallest(..)[pandas-doc] :

df.nsmallest(2, 'Age')

Dla danych przykładowych daje to nam:

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

Lub jeśli potrzebujesz tylko wartości Agekolumny:

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

lub możesz zawinąć w listę:

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

Możesz uzyskać n najmniejszych unikalnych wartości, najpierw konstruując wartość Seriesunikalną:

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

2
@SPy: możesz również skorzystać df['Age'].nsmallest(2):)
Willem Van Onsem,

3

Właściwe jest użycie nsmallest, tutaj pokazuję inny sposób: DataFrame.sort_values+DataFrame.head

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

AKTUALIZACJA

Jeśli są duplikaty , moglibyśmy użyć Series.drop_duplicateswcześniej:

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

lub np.sort+np.unique

[*np.sort(df['Age'].unique())[:2]]
#[18, 23]
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.