Cómo encontrar los valores mínimos superiores de N del DataFrame, Python-3

9

Tengo debajo de Dataframe con el campo 'Edad', Necesito encontrar la edad mínima de los 3 primeros del 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()  

¿Quieres los dos primeros años, es decir, 18, 23 en la lista, cómo lograr esto?

Nota: DataFrame - DF contiene duplicados de edad, es decir, 18 y 23 repetidos dos veces, necesitan valores únicos.

Espía
fuente

Respuestas:

14

Puedes usar nsmallest(..)[pandas-doc] :

df.nsmallest(2, 'Age')

Para los datos de muestra dados, esto nos da:

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

O si solo necesita el valor de la Agecolumna:

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

o puedes envolverlo en una lista:

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

Puede obtener los n valores únicos más pequeños construyendo primero a Seriescon valores únicos:

>>> 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
fuente
2
@SPy: también puedes usar df['Age'].nsmallest(2):)
Willem Van Onsem
3

Lo correcto es usar nsmallest, aquí te muestro otra forma: DataFrame.sort_values+DataFrame.head

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

ACTUALIZADO

Si hay duplicados , podríamos usar Series.drop_duplicatespreviamente:

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

o np.sort+np.unique

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