Нужна одинаковая привязка рейтинга для колонны в пандах - PullRequest
0 голосов
/ 09 октября 2018

Я довольно новичок в Пандах.У меня есть DataFrame, как показано ниже:

In [47]: print(d1)
         date name            sector     value
0  2014-10-31    A  Information Tech  -3.18229
1  2014-10-31    B       Industrials  -52.1333
2  2014-10-31    C  Consumer Discret   45.3428
3  2014-10-31    D       Industrials   -4.4901
4  2014-10-31    E       Industrials   6.85653
5  2014-10-31    F  Information Tech   4.56422
6  2014-10-31    H  Information Tech  29.31419
7  2014-10-31    G  Information Tech   6.52422
8  2014-10-31    I            Sports  16.52422
9  2014-10-31    J            Sports   2.62176

Вариант использования - для определенного дня записей мне нужно единообразное ранжирование для столбца значение .Ранг всегда должен находиться в диапазоне от 1 до 6 независимо от количества записей.В случае ничьей мне нужно дать среднее значение рейтинга для этих записей.

Для простоты я оставил total_rows всего на 10 выше, в действительности это намного большее число для каждой даты (в диапазоне тысяч).И диапазон рангов будет от 1 до 100

Output can be something like below:

         date name            sector     value  rank
0  2014-10-31    A  Information Tech  -3.18229  5
1  2014-10-31    B       Industrials  -52.1333  6
2  2014-10-31    C  Consumer Discret   45.3428  1
3  2014-10-31    D       Industrials   -4.4901  5
4  2014-10-31    E       Industrials   6.85653  3
5  2014-10-31    F  Information Tech   4.56422  3
6  2014-10-31    H  Information Tech  29.31419  1
7  2014-10-31    G  Information Tech   6.52422  3
8  2014-10-31    I            Sports  16.52422  2
9  2014-10-31    J            Sports   2.62176  4 

Каков наилучший способ предоставления равномерных рангов?Я много пытался искать, не нашел ничего полезного.

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Итак, я смог найти подходящее решение для своего варианта использования.Я использую функции cut с функцией панд rank.

df['rank'] = pd.cut(df['value'], 100, labels = list(range(1,101)))
0 голосов
/ 09 октября 2018

Вы можете попробовать использовать pd.qcut:

df['rank'] = pd.qcut(df['value'], 6, [*'654321'])

Или

df['rank'] = pd.qcut(df['value'], 6, labels = ['6','5','4','3','2','1'])

Выход:

             date name            sector     value rank
0 2014-10-31         A  Information Tech  -3.18229    5
1 2014-10-31         B       Industrials -52.13330    6
2 2014-10-31         C  Consumer Discret  45.34280    1
3 2014-10-31         D       Industrials  -4.49010    6
4 2014-10-31         E       Industrials   6.85653    3
5 2014-10-31         F  Information Tech   4.56422    4
6 2014-10-31         H  Information Tech  29.31419    1
7 2014-10-31         G  Information Tech   6.52422    3
8 2014-10-31         I            Sports  16.52422    2
9 2014-10-31         J            Sports   2.62176    5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...