如何从 DataFrame 中找到前 N 个最小值,Python-3

SPy*_*SPy 9 python dataframe python-3.x pandas pandas-groupby

我在数据框下方有字段“年龄”,需要从数据框中找到前 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()  
Run Code Online (Sandbox Code Playgroud)

想要列表中的前两个年龄即 18、23,如何实现?

注意:DataFrame - DF 包含 Age Duplicates,即 18 和 23 重复两次,需要唯一值。

Wil*_*sem 14

您可以使用nsmallest(..)[pandas-doc]

df.nsmallest(2, 'Age')
Run Code Online (Sandbox Code Playgroud)

对于给定的样本数据,这给了我们:

>>> df.nsmallest(2, 'Age')
  Name  Age
0    A   18
4    E   23
Run Code Online (Sandbox Code Playgroud)

或者,如果您只需要Age列的值:

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

或者您可以将其包装在列表中:

>>> df['Age'].nsmallest(2).to_list()
[18, 23]
Run Code Online (Sandbox Code Playgroud)

您可以获取ñ最小的独特价值,首先构造一个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
Run Code Online (Sandbox Code Playgroud)

  • @SPy:您也可以使用`df['Age'].nsmallest(2)`:) (2认同)