@@ -131,7 +131,7 @@ def group_rank_object(ndarray[float64_t, ndim=2] out,
131
131
cdef:
132
132
int tiebreak
133
133
Py_ssize_t i, j, N, K
134
- int64_t val_start= 0 , grp_start= 0 , dups= 0 , sum_ranks= 0
134
+ int64_t val_start= 0 , grp_start= 0 , dups= 0 , sum_ranks= 0 , vals_seen = 1
135
135
ndarray[int64_t] _as
136
136
bint pct, ascending
137
137
@@ -160,20 +160,21 @@ def group_rank_object(ndarray[float64_t, ndim=2] out,
160
160
out[_as[j], 0 ] = i - grp_start + 1
161
161
elif tiebreak == TIEBREAK_FIRST:
162
162
for j in range (i - dups + 1 , i + 1 ):
163
- out[_as[j], 0 ] = j + 1
164
- elif tiebreak == TIEBREAK_FIRST_DESCENDING:
165
- for j in range (i - dups + 1 , i + 1 ) :
166
- out[_as[j], 0 ] = 2 * (i - grp_start) - j - dups + 2
163
+ if ascending:
164
+ out[_as[j], 0 ] = j + 1
165
+ else :
166
+ out[_as[j], 0 ] = 2 * i - j - dups + 2
167
167
elif tiebreak == TIEBREAK_DENSE:
168
168
for j in range (i - dups + 1 , i + 1 ):
169
- out[_as[j], 0 ] = val_start - grp_start
169
+ out[_as[j], 0 ] = vals_seen
170
170
171
171
if (i == N - 1 or (
172
172
(values[_as[i], 0 ] != values[_as[i+ 1 ], 0 ]) and not
173
173
(values[_as[i], 0 ] is np.nan and values[_as[i+ 1 ], 0 ] is np.nan)
174
174
)):
175
175
dups = sum_ranks = 0
176
176
val_start = i
177
+ vals_seen += 1
177
178
178
179
if i == N - 1 or labels[_as[i]] != labels[_as[i+ 1 ]]:
179
180
if pct:
0 commit comments