Cara menemukan nilai minimum N teratas dari DataFrame, Python-3

9

Saya memiliki Dataframe di bawah ini dengan Field 'Usia', Perlu menemukan ke atas 3 usia minimum dari 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()  

Ingin dua Umur teratas yaitu 18, 23 dalam Daftar, Bagaimana mencapai ini?

Catatan: DataFrame - DF Berisi Duplikat Usia, yaitu 18 & 23 yang diulang dua kali, perlu nilai unik.

Mengintai
sumber

Jawaban:

14

Anda dapat menggunakan nsmallest(..)[panda-doc] :

df.nsmallest(2, 'Age')

Untuk data sampel yang diberikan, ini memberi kami:

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

Atau jika Anda hanya membutuhkan nilai Agekolom:

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

atau Anda dapat membungkusnya dalam daftar:

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

Anda dapat memperoleh n nilai unik terkecil , dengan terlebih dahulu membuat Seriesnilai unik:

>>> 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
sumber
2
@SPy: Anda dapat memanfaatkannya df['Age'].nsmallest(2)juga :)
Willem Van Onsem
3

Yang benar adalah menggunakan nsmallest, di sini saya menunjukkan cara lain: DataFrame.sort_values+DataFrame.head

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

DIPERBARUI

Jika ada duplikat , kita bisa menggunakan Series.drop_duplicatessebelumnya:

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

atau np.sort+np.unique

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