วิธีค้นหาค่าต่ำสุด N อันดับแรกจาก DataFrame, Python-3


9

ฉันมี Dataframe ด้านล่างด้วยฟิลด์ 'อายุ' ต้องการค้นหาอายุขั้นต่ำ 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)ได้เป็นอย่างดี :)
วิลเล็มแวน Onsem

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]
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.