Skip to content

Commit caa5649

Browse files
authored
REF: de-duplicate pad/backfill code (#40689)
1 parent 872fc29 commit caa5649

File tree

1 file changed

+2
-56
lines changed

1 file changed

+2
-56
lines changed

pandas/_libs/algos.pyx

+2-56
Original file line numberDiff line numberDiff line change
@@ -794,68 +794,14 @@ def backfill(ndarray[algos_t] old, ndarray[algos_t] new, limit=None) -> ndarray:
794794
return indexer
795795

796796

797-
@cython.boundscheck(False)
798-
@cython.wraparound(False)
799797
def backfill_inplace(algos_t[:] values, uint8_t[:] mask, limit=None):
800-
cdef:
801-
Py_ssize_t i, N
802-
algos_t val
803-
uint8_t prev_mask
804-
int lim, fill_count = 0
805-
806-
N = len(values)
807-
808-
# GH#2778
809-
if N == 0:
810-
return
811-
812-
lim = validate_limit(N, limit)
813-
814-
val = values[N - 1]
815-
prev_mask = mask[N - 1]
816-
for i in range(N - 1, -1, -1):
817-
if mask[i]:
818-
if fill_count >= lim:
819-
continue
820-
fill_count += 1
821-
values[i] = val
822-
mask[i] = prev_mask
823-
else:
824-
fill_count = 0
825-
val = values[i]
826-
prev_mask = mask[i]
798+
pad_inplace(values[::-1], mask[::-1], limit=limit)
827799

828800

829-
@cython.boundscheck(False)
830-
@cython.wraparound(False)
831801
def backfill_2d_inplace(algos_t[:, :] values,
832802
const uint8_t[:, :] mask,
833803
limit=None):
834-
cdef:
835-
Py_ssize_t i, j, N, K
836-
algos_t val
837-
int lim, fill_count = 0
838-
839-
K, N = (<object>values).shape
840-
841-
# GH#2778
842-
if N == 0:
843-
return
844-
845-
lim = validate_limit(N, limit)
846-
847-
for j in range(K):
848-
fill_count = 0
849-
val = values[j, N - 1]
850-
for i in range(N - 1, -1, -1):
851-
if mask[j, i]:
852-
if fill_count >= lim:
853-
continue
854-
fill_count += 1
855-
values[j, i] = val
856-
else:
857-
fill_count = 0
858-
val = values[j, i]
804+
pad_2d_inplace(values[:, ::-1], mask[:, ::-1], limit)
859805

860806

861807
@cython.boundscheck(False)

0 commit comments

Comments
 (0)