DataFrame, Python-3에서 상위 N 개의 최소값을 찾는 방법


9

Field 'Age'가있는 Dataframe 아래에 DataFrame에서 최소 3 세 이상이 필요합니다.

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()  

목록에서 상위 2 세, 즉 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]

먼저 고유 한 값으로 a 를 구성 하여 n 개의 가장 작은 고유 한 값을 얻을 수 있습니다 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.