Как ранжировать данные, но дать такой же рейтинг для данных, которые равны - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть CSV дневных максимальных температур.Я пытаюсь назначить «ранг» для моих данных.Сначала я отсортировал максимальную дневную температуру по убыванию.Затем я создал новый столбец с именем rank.

#Sort data smallest to largest
ValidFullData_Sorted=ValidFullData.sort_values(by="TMAX")
#count total obs
n=ValidFullData_Sorted.shape[0]
#add a numbered column 1-> n to use in return calculation for rank
ValidFullData_Sorted.insert(0,'rank',range(1,1+n))

Как я могу сделать ранг одинаковым для одинаковых значений дневной максимальной температуры?(т. е. каждый раз, когда дневная максимальная температура достигает 95 °, ранг для каждого из этих экземпляров должен быть одинаковым)

Вот некоторые примеры данных: (его суточные данные о температуре, то есть тысячи строк)

Date    TMAX  TMIN
1/1/00  22    11
1/2/00  26    12
1/3/00  29    14
1/4/00  42    7
1/5/00  42    21

И я хочу добавить столбец TMAXrank, который бы выглядел так:

Date    TMAX  TMIN  TMAXRank
1/1/00  22    11    4
1/2/00  26    12    3
1/3/00  29    14    2
1/4/00  42    7     1
1/5/00  42    21    1

1 Ответ

0 голосов
/ 04 декабря 2018
ValidFullData['TMAXRank'] = ValidFullData[ValidFullData['TMAX'] < 95]['TMAX'].rank(ascending=False, method='dense')

Выход:

    Unnamed: 0  TMAX  TMIN  TMAXRank
17          17    88    14       1.0
16          16    76    12       2.0
15          15    72    11       3.0
14          14    64    21       4.0
8            8    62     7       5.0
7            7    58    14       6.0
13          13    58     7       6.0
18          18    55     7       7.0
3            3    42     7       8.0
4            4    42    21       8.0
6            6    41    12       9.0
12          12    37    14      10.0
5            5    36    11      11.0
2            2    29    14      12.0
1            1    26    12      13.0
0            0    22    11      14.0
9            9    98    21       NaN
10          10   112    11       NaN
11          11    98    12       NaN
19          19    95    21       NaN
...