Skip to content

Commit 7de2824

Browse files
committed
Added support for sorting
1 parent f7613a5 commit 7de2824

File tree

2 files changed

+14
-6
lines changed

2 files changed

+14
-6
lines changed

pandas/_libs/groupby.pyx

+5-1
Original file line numberDiff line numberDiff line change
@@ -133,14 +133,18 @@ def group_rank_object(ndarray[float64_t, ndim=2] out,
133133
Py_ssize_t i, j, N, K
134134
int64_t val_start=0, grp_start=0, dups=0, sum_ranks=0
135135
ndarray[int64_t] _as
136-
bint pct
136+
bint pct, ascending
137137

138138
tiebreak = tiebreakers[kwargs['ties_method']]
139139
pct = kwargs['pct']
140+
ascending = kwargs['ascending']
140141
N, K = (<object> values).shape
141142

142143
_as = np.lexsort((values[:, 0], labels))
143144

145+
if not ascending:
146+
_as = _as[::-1]
147+
144148
for i in range(N):
145149
dups += 1
146150
sum_ranks += i - grp_start + 1

pandas/_libs/groupby_helper.pxi.in

+9-5
Original file line numberDiff line numberDiff line change
@@ -459,14 +459,18 @@ def group_rank_{{name}}(ndarray[float64_t, ndim=2] out,
459459
Py_ssize_t i, j, N, K
460460
int64_t val_start=0, grp_start=0, dups=0, sum_ranks=0
461461
ndarray[int64_t] _as
462-
bint pct
462+
bint pct, ascending
463463

464464
tiebreak = tiebreakers[kwargs['ties_method']]
465+
ascending = kwargs['ascending']
465466
pct = kwargs['pct']
466467
N, K = (<object> values).shape
467468

468469
_as = np.lexsort((values[:, 0], labels))
469470

471+
if not ascending:
472+
_as = _as[::-1]
473+
470474
with nogil:
471475
for i in range(N):
472476
dups += 1
@@ -483,10 +487,10 @@ def group_rank_{{name}}(ndarray[float64_t, ndim=2] out,
483487
out[_as[j], 0] = i - grp_start + 1
484488
elif tiebreak == TIEBREAK_FIRST:
485489
for j in range(i - dups + 1, i + 1):
486-
out[_as[j], 0] = j + 1
487-
elif tiebreak == TIEBREAK_FIRST_DESCENDING:
488-
for j in range(i - dups + 1, i + 1):
489-
out[_as[j], 0] = 2 * (i - grp_start) - j - dups + 2
490+
if ascending:
491+
out[_as[j], 0] = j + 1
492+
else:
493+
out[_as[j], 0] = 2 * i - j - dups + 2
490494
elif tiebreak == TIEBREAK_DENSE:
491495
for j in range(i - dups + 1, i + 1):
492496
out[_as[j], 0] = val_start - grp_start

0 commit comments

Comments
 (0)