pandas.Series.rank

Nombre completo
pandas.Series.rank
Librería
pandas
Sintaxis

Series.rank(
    axis=0,
    method='average',
    numeric_only=None,
    na_option='keep',
    ascending=True,
    pct=False
)

Descripción

El método rank de una serie pandas devuelve otra serie pandas en la que los valores son el resultado de asignar rangos (desde 1 hasta n) a los valores de la serie original considerándolos ordenados, por defecto, de menor a mayor. Es decir, el menor valor recibe el rango 1, el siguiente el 2, etc. El parámetro method controla el método de asignación de rangos a valores coincidentes.

El índice de la serie original se mantiene. Los rangos asignados son números reales.

Parámetros
  • axis: (0 o "index") Eje a lo largo del cual se calculan los rangos. Solo está permitido el valor 0 o "index" (valor por defecto), no la opción 1 (o "columns"), reservada para DataFrames
  • method: ("average" -valor por defecto-, "min", "max", "first", "dense") Criterio para asignar rangos a valores coincidentes. Estos criterios parten de los rangos que se asignarían al grupo de valores si cada valor recibiese un rango distinto (véanse ejemplos más adelante)
    • "average": (Valor por defecto) devuelve el valor medio de los rangos que se asignarían al grupo
    • "min": Valor mínimo del grupo. El siguiente valor (fuera del grupo) recibe como rango el asignado al grupo + n, siendo n el número de elementos del grupo
    • "max": Valor máximo del grupo
    • "first": Rangos asignados según el orden en el que los valores aparecen en la serie
    • "dense": semejante a "min" pero el siguiente valor (fuera del grupo) recibe como rango el asignado al grupo + 1
  • na_option: ("keep" -valor por defecto-, "top", "bottom"). Controla la gestión de los valores nulos:
    • "keep": Asigna el rango NaN a los valores NaN
    • "top": Asigna el menor rango a los valores NaN
    • "bottom": Asigna el mayor rango a los valores NaN.
  • ascending: (bool, True por defecto). Si toma el valor True los rangos se asignarán de menor a mayor valor (el menor valor recibirá el rango 1.0).
  • pct: (bool, False por defecto) Controla si los rangos se mostrarán con formato de fracción.
Resultado

El método rank de una serie pandas devuelve otra serie pandas.

Ejemplos

Si partimos de una serie pandas formada por los valores 3, 6, 2 y 8:

s = pd.Series([3, 6, 2, 8], index = list("ABCD"))
s

A    3
B    6
C    2
D    8
dtype: int64

...podemos obtener los rangos de estos valores aplicando el método rank:

s.rank()

A    2.0
B    3.0
C    1.0
D    4.0
dtype: float64

Como vemos, el valor más bajo de la serie original (2, cuyo índice era "C") ha recibido el rango 1.0. El siguiente -considerados de menor a mayor (3, cuyo índice era "A")- ha recibido el rango 2.0, etc.

Comprobamos también que los rangos son números reales.

Si hay valores repetidos, por defecto se devuelve el valor medio de los rangos que éstos recibirían si se asignasen rangos diferentes. Por ejemplo:

s = pd.Series([3, 6, 2, 3], index = list("ABCD"))
s

A    3
B    6
C    2
D    3
dtype: int64

s.rank()

A    2.5
B    4.0
C    1.0
D    2.5
dtype: float64

Si se hubiesen asignado rangos diferentes, los valores 3 (índices "A" y "D") habrían recibido los rangos 2.0 y 3.0 (o 3.0 y 2.0, es indiferente), por lo que su valor medio es 2.5.

Si quisiéramos que los valores repetidos recibiesen, por ejemplo, el rango mínimo de los que recibirían en el caso de asignarse rangos distintos, podemos hacer uso del parámetro method:

s.rank(method = "min")

A    2.0
B    4.0
C    1.0
D    2.0
dtype: float64

Como hemos visto en el ejemplo anterior, los valores 3 recibirían los rangos 2.0 y 3.0, por lo que su valor mínimo es 2.0. Obsérvese que, con este criterio, ningún valor recibe el rango 3.0 y que el siguiente valor fuera del grupo (el valor 6 cuyo índice es "B") recibe el siguiente rango disponible (4.0).

Si deseásemos cambiar el comportamiento mostrado en el ejemplo anterior podemos aplicar como método "dense":

s.rank(method = "dense")

A    2.0
B    3.0
C    1.0
D    2.0
dtype: float64

En este caso los valores repetidos reciben el rango mínimo (2.0), pero el siguiente valor fuera del rango (el valor 6 de índice "B") recibe el siguiente rango (3.0).

Es posible controlar el orden de asignación de los rangos con el parámetro ascending:

s = pd.Series([3, 6, 2, 8], index = list("ABCD"))
s

A    3
B    6
C    2
D    8
dtype: int64

s.rank(ascending = False)

A    3.0
B    2.0
C    4.0
D    1.0
dtype: float64

Comprobamos que, en este caso, es el mayor valor (el valor 8 de índice "D") el que recibe el rango 1.0.

Si la serie original incluye NaN's, por defecto reciben como rango NaN's:

s = pd.Series([3, np.nan, 6, 2, 8, np.nan], index = list("ABCDEF"))
s

A    3.0
B    NaN
C    6.0
D    2.0
E    8.0
F    NaN
dtype: float64

s.rank()

A    2.0
B    NaN
C    3.0
D    1.0
E    4.0
F    NaN
dtype: float64

Si quisiéramos que los NaN's recibiesen un rango numérico, podemos hacer uso del parámetro na_option. Si éste toma el valor "top", los NaN's reciben el rango más bajo:

s.rank(na_option = "top")

A    4.0
B    1.5
C    5.0
D    3.0
E    6.0
F    1.5
dtype: float64

Vemos que los dos NaN's han recibido el rango 1.5 (valor medio de 1.0 y 2.0, pues ya sabemos que, por defecto, el criterio de asignación para valores coincidentes es "average").

Si se asigna al parámetro pct el valor True, los rangos se asignan con formato de fracción:

s = pd.Series([3, 6, 2, 8], index = list("ABCD"))
s

A    3
B    6
C    2
D    8
dtype: int64

s.rank()

A    2.0
B    3.0
C    1.0
D    4.0
dtype: float64

s.rank(pct = True)

A    0.50
B    0.75
C    0.25
D    1.00
dtype: float64

Enviado por admin el Vie, 15/01/2021 - 10:07