Як знайти найвищі N мінімальних значень у DataFrame, Python-3


9

У мене нижче Dataframe з полем "Age", потреби знаходять верхній 3 мінімальний вік від 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()  

Хочете двох найкращих віків, тобто 18, 23 у списку, як цього досягти?

Примітка: DataFrame - DF Містить копії віку, тобто 18 і 23 рази, повторені двічі, потрібні унікальні значення.

Відповіді:


14

Ви можете скористатися nsmallest(..)[pandas-doc] :

df.nsmallest(2, 'Age')

Для наведених зразкових даних це дає нам:

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

Або якщо вам потрібне лише значення Ageстовпця:

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

або ви можете зафіксувати його у списку:

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

Ви можете отримати n найменших унікальних значень, спочатку побудувавши a Seriesз унікальними значеннями:

>>> 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: Ви також можете скористатися df['Age'].nsmallest(2):)
Віллем Ван Онсем

3

Правильним є використання nsmallest, тут я показую інший спосіб: DataFrame.sort_values+DataFrame.head

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

ОНОВЛЕНО

Якщо є дублікати , ми могли б використовувати Series.drop_duplicatesраніше:

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

або np.sort+np.unique

[*np.sort(df['Age'].unique())[:2]]
#[18, 23]
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.