pyspark.pandas.DataFrame.rank

DataFrame. rank ( method : str = 'average' , ascending : bool = True , numeric_only : Optional [ bool ] = None ) → pyspark.pandas.frame.DataFrame [source]

沿轴计算数值数据的排名(1到n)。相等的值被分配一个排名,该排名是这些值排名的平均值。

注意

当前的rank实现使用了Spark的Window,但没有指定分区规范。这会导致将所有数据移动到单个机器的单个分区中,可能会导致严重的性能下降。避免在大数据集上使用此方法。

Parameters
method {‘average’, ‘min’, ‘max’, ‘first’, ‘dense’}
  • average: 组的平均排名

  • min: 组中的最低排名

  • max: 组中的最高排名

  • first: 按数组中出现的顺序分配排名

  • dense: 类似于‘min’,但在组之间排名总是增加1

ascending boolean, default True

从高(1)到低(N)排名的为假

numeric_only bool, optional

对于DataFrame对象,如果设置为True,则仅对数值列进行排名。

Returns
ranks same type as caller

示例

>>> df = ps.DataFrame({'A': [1, 2, 2, 3], 'B': [4, 3, 2, 1]}, columns=['A', 'B'])
>>> df
   A  B
0  1  4
1  2  3
2  2  2
3  3  1
>>> df.rank().sort_index()
     A    B
0  1.0  4.0
1  2.5  3.0
2  2.5  2.0
3  4.0  1.0

如果方法设置为‘min’,它使用组中的最低排名。

>>> df.rank(method='min').sort_index()
     A    B
0  1.0  4.0
1  2.0  3.0
2  2.0  2.0
3  4.0  1.0

如果方法设置为‘max’,它使用组中的最高排名。

>>> df.rank(method='max').sort_index()
     A    B
0  1.0  4.0
1  3.0  3.0
2  3.0  2.0
3  4.0  1.0

如果方法设置为‘dense’,它不会在组中留下间隙。

>>> df.rank(method='dense').sort_index()
     A    B
0  1.0  4.0
1  2.0  3.0
2  2.0  2.0
3  3.0  1.0

如果 numeric_only 设置为 ‘True’,则仅对数值列进行排名。

>>> df = ps.DataFrame({'A': [1, 2, 2, 3], 'B': ['a', 'b', 'd', 'c']}, columns= ['A', 'B'])
>>> df
   A  B
0  1  a
1  2  b
2  2  d
3  3  c
>>> df.rank(numeric_only=True)
     A
0  1.0
1  2.5
2  2.5
3  4.0