Come trovare i valori minimi N più alti da DataFrame, Python-3


9

Ho un Dataframe inferiore con il campo "Età", è necessario trovare tra i primi 3 anni minimi dal 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()  

Desideri i primi due anni, ovvero 18, 23 in elenco, come raggiungere questo obiettivo?

Nota: DataFrame - DF contiene duplicati dell'età, ovvero 18 e 23 ripetuti due volte, richiedono valori univoci.

Risposte:


14

Puoi usare nsmallest(..)[pandas-doc] :

df.nsmallest(2, 'Age')

Per i dati di esempio forniti, questo ci dà:

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

O se hai solo bisogno del valore della Agecolonna:

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

oppure puoi inserirlo in un elenco:

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

È possibile ottenere i n valori univoci più piccoli , costruendo innanzitutto un Seriescon valori univoci:

>>> 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: puoi anche usarlo df['Age'].nsmallest(2):)
Willem Van Onsem il

3

La cosa giusta è usare nsmallest , qui mostro un altro modo: DataFrame.sort_values+DataFrame.head

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

AGGIORNATO

Se ci sono duplicati , potremmo usare in Series.drop_duplicatesprecedenza:

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]
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.