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 cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.