Найти процентиль всех элементов в списке - PullRequest
0 голосов
/ 29 марта 2020

У меня есть отсортированный список, например,

S = [0, 10.2, 345.9, ...]

Если S большой (500k + элементов), что лучше способ узнать, какому процентилю принадлежит каждый элемент?

Моя цель - сохранить в таблице базы данных, которая выглядит примерно так:

Svalue | Percentile
-------------------
0      |     a
10.2.  |     b
345.9  |     c
...    |    ...

Ответы [ 2 ]

3 голосов
/ 29 марта 2020

Попробуйте pandas ранг

import pandas as pd

df = pd.DataFrame()
df["Svalue"] = S
df["Percentile"] = df["Svalue"].rank(pct=True)
1 голос
/ 29 марта 2020

Решение:

# Import and initialise pandas into session: 
import pandas as pd

# Store a scalar of the length of the list: list_length => list
list_length = len(S)

# Use a list comprehension to retrieve the indices of each element: idx => list
idx = [index for index, value in enumerate(S)]

# Divide each of the indices by the list_length scalar using a list 
# comprehension: percentile_rank => list
percentile_rank = [el / list_length for el in idx]

# Column bind separate lists into a single DataFrame in order to achieved desired format: df => pd.DataFrame
df = pd.DataFrame({"Svalue": S,  "Percentile": percentile_rank}) 

# Send the first 6 rows to console: stdout
df.head()

Данные:

# Ensure list is sorted: S => list
S = sorted([0, 10.2, 345.9])

# Print the result: stdout
print(S)
...