Cách tìm N giá trị tối thiểu hàng đầu từ DataFrame, Python-3


9

Tôi có dưới Dataframe với Trường 'Tuổi', Cần tìm đến 3 tuổi tối thiểu hàng đầu từ 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()  

Muốn hai tuổi hàng đầu tức là 18, 23 trong Danh sách, Làm thế nào để đạt được điều này?

Lưu ý: DataFrame - DF Chứa các bản sao Tuổi, tức là 18 & 23 được lặp lại hai lần, cần các giá trị duy nhất.

Câu trả lời:


14

Bạn có thể sử dụng nsmallest(..)[pandas-doc] :

df.nsmallest(2, 'Age')

Đối với dữ liệu mẫu đã cho, điều này cho chúng ta:

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

Hoặc nếu bạn chỉ cần giá trị của Agecột:

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

hoặc bạn có thể gói nó trong một danh sách:

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

Bạn có thể nhận được n giá trị duy nhất nhỏ nhất , bằng cách đầu tiên xây dựng một Seriesgiá trị duy nhất:

>>> 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: bạn cũng có thể sử dụng df['Age'].nsmallest(2):)
— Willem Van Onsem

3

Điều đúng đắn là sử dụng nsmallest, ở đây tôi chỉ ra một cách khác: DataFrame.sort_values+DataFrame.head

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

CẬP NHẬT

Nếu có trùng lặp , chúng ta có thể sử dụng Series.drop_duplicatestrước đó:

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

hoặc np.sort+np.unique

[*np.sort(df['Age'].unique())[:2]]
#[18, 23]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.