pyspark.pandas.DataFrame.nlargest

DataFrame. nlargest ( n : int , columns : Union[Any, Tuple[Any, …], List[Union[Any, Tuple[Any, …]]]] , keep : str = 'first' ) → pyspark.pandas.frame.DataFrame [source]

返回按 降序排列的前 n 行。

返回具有最大值的前 n 行,按降序排列。未指定的列也会返回,但不会用于排序。

此方法等同于 df.sort_values(columns, ascending=False).head(n) ,但在 pandas 中更高效。 在 pandas-on-Spark 中,由于 Spark 的延迟执行和查询优化器,两者性能相同。

Parameters
n int

要返回的行数。

columns label or list of labels

要排序的列标签。

keep {‘first’, ‘last’}, default ‘first’. ‘all’ is not implemented yet.

确定保留哪些重复项(如果有)。 - first : 保留第一次出现的内容。 - last : 保留最后一次出现的内容。

Returns
DataFrame

按给定列降序排列的前 n 行。

另请参阅

DataFrame.nsmallest

返回按 升序排列的前 n 行。

DataFrame.sort_values

按值对DataFrame进行排序。

DataFrame.head

返回前 n 行而不重新排序。

注释

此函数不能用于所有列类型。例如,当指定具有 对象 类别 数据类型的列时,会引发 TypeError

示例

>>> df = ps.DataFrame({'X': [1, 2, 3, 5, 6, 7, np.nan],
...                    'Y': [6, 7, 8, 9, 10, 11, 12]})
>>> df
     X   Y
0  1.0   6
1  2.0   7
2  3.0   8
3  5.0   9
4  6.0  10
5  7.0  11
6  NaN  12

在下面的示例中,我们将使用 nlargest 来选择列“X”中具有最大值的三行。

>>> df.nlargest(n=3, columns='X')
     X   Y
5  7.0  11
4  6.0  10
3  5.0   9

要按列“Y”中的最大值,然后是“X”排序,我们可以像在下一个示例中那样指定多个列。

>>> df.nlargest(n=3, columns=['Y', 'X'])
     X   Y
6  NaN  12
5  7.0  11
4  6.0  10

下面的示例展示了如何处理并列情况,这由 keep 决定。

>>> tied_df = ps.DataFrame({'X': [1, 2, 2, 3, 3]}, index=['a', 'b', 'c', 'd', 'e'])
>>> tied_df
   X
a  1
b  2
c  2
d  3
e  3

当使用 keep=’first’(默认)时,平局按顺序解决:

>>> tied_df.nlargest(3, 'X')
   X
d  3
e  3
b  2
>>> tied_df.nlargest(3, 'X', keep='first')
   X
d  3
e  3
b  2

当使用 keep='last' 时,平局按相反顺序解决:

>>> tied_df.nlargest(3, 'X', keep='last')
   X
e  3
d  3
c  2