Есть ли способ сделать взвешенное ранжирование из 3 столбцов в pandas? - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть три столбца, которые я хочу ранжировать на основе определенных весов. Вот пример фрейма данных, с которым я работаю:

Sales Revenue             Product Count           Average Sales/Product
1005650                   30                      33521.67
100223                    5                       20044.60
72233                     2                       36116.50
1005657                   13                      77358.23
1002233                   25                      40089.32

Я хочу создать ранжирование, в котором, например, 45% от веса среднестатистических продаж / продукта, 35% веса от выручки от продаж и 20% веса по количеству продуктов. Я знаю, что в pandas это может быть сделано:

col1 = sales["Sales Revenue"].astype(str)
col2 = sales["Average Sales/Product"].astype(str) 
col3 = sales["Product Count"].astype(str)

sales['Rank'] = (col2+col1+col3).astype('int64').rank(method='dense', ascending=False).astype(int64)
sales = sales.sort_values('Rank')

Но я не понимаю, как работает этот метод, потому что он действительно ранжируется, но логика c за ним мне не кажется Понимаю. Есть ли способ, которым я могу создать систему ранжирования, которая на основе процентных весов будет в состоянии создать ранжирование с повышенным акцентом на Средний объем продаж / продукт, затем Доход от продаж, затем Количество продуктов.

1 Ответ

0 голосов
/ 16 апреля 2020

Вы можете просто вычислить средневзвешенное значение и оценить его:

sales['Rank'] = (sales['Average Sales/Product'] * 45 +
        sales['Sales Revenue'] * 35 + sales['Product Count'] * 20).rank(
            ascending=False).astype('int64')
...