Как ранжировать значения строк (значения с плавающей запятой)? - PullRequest
0 голосов
/ 17 января 2020

В python, как создать столбец Sales_rank, значения от 100 до 1.

if Sales_2019 <= 0.00371665 then Sales_rank =100 ;

else if Sales <= 0.0071706859 then Sales_rank =99 ;
else if Sales <= 0.0122105282 then Sales_rank =98 ;

.....

else if Sales <= 0.9602417519 then Sales_rank =2 ;
else if Sales > 0.9602417519 then Sales_rank =1 ;

Любой драгоценный подход для обработки значений с плавающей запятой с использованием <= (меньше чем равно)? </p>

1 Ответ

0 голосов
/ 18 января 2020

Если вы ищете способ ранжировать список значений с плавающей запятой, то это может сработать для вас:

import numpy as np
from scipy.stats import rankdata

n = 100 # Number of Ranks/Data points
sales = np.random.rand(n) # create random values between 0 and 1 of size n as fake sales

# Rank the data, reverse the order (highest Sale is lowest (=best) rank) 
# and convert it to integer/list    
sales_order = rankdata([-1 * sale for sale in sales]).astype(int).tolist() 


for rank in range(n,0,-1): # count backwards from 100
    print("Sale: {:5.4f} makes rank {:d}".format(sales[int(sales_order.index(rank))], rank))

Теперь sales[int(sales_order.index(rank))] может сначала показаться запутанным. Sales_order - список, содержащий рейтинг всех n продаж. Поскольку продажи идут не в определенном порядке, их рейтинг не связан. Сначала он ищет индекс ранга 100, затем индекс ранга 99 и так далее. Возвращает продажу соответствующего ранга. Остальное просто отформатировать, чтобы получить такой вывод для n = 10

Sale: 0.1087 makes rank 10
Sale: 0.2955 makes rank 9
Sale: 0.3214 makes rank 8
Sale: 0.3531 makes rank 7
Sale: 0.4374 makes rank 6
Sale: 0.4744 makes rank 5
Sale: 0.5143 makes rank 4
Sale: 0.5892 makes rank 3
Sale: 0.7534 makes rank 2
Sale: 0.9390 makes rank 1

Вам нужно numpy и scipy, установленный в вашей среде python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...