DataFrame、Python-3から上位N個の最小値を見つける方法


9

私はフィールド「年齢」のデータフレームの下にいます、データフレームからトップ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が2回繰り返され、一意の値が必要です。

回答:


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個の最小の一意の値を取得でき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)ます:)
Willem Van 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.