From dec831fa0718f53bc5058ac06d7fe16d68ce0cde Mon Sep 17 00:00:00 2001 From: Parallels Date: Wed, 11 Mar 2020 17:22:15 -0700 Subject: [PATCH] Simplified get_blkno_indexers --- pandas/_libs/internals.pyx | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/pandas/_libs/internals.pyx b/pandas/_libs/internals.pyx index 8bbbc6db94842..44845e43a9824 100644 --- a/pandas/_libs/internals.pyx +++ b/pandas/_libs/internals.pyx @@ -1,4 +1,5 @@ import cython +from collections import defaultdict from cython import Py_ssize_t from cpython.slice cimport PySlice_GetIndicesEx @@ -371,8 +372,7 @@ def get_blkno_indexers(int64_t[:] blknos, bint group=True): Py_ssize_t i, start, stop, n, diff object blkno - list group_order - dict group_dict + object group_dict = defaultdict(list) int64_t[:] res_view n = blknos.shape[0] @@ -393,28 +393,16 @@ def get_blkno_indexers(int64_t[:] blknos, bint group=True): yield cur_blkno, slice(start, n) else: - group_order = [] - group_dict = {} - for i in range(1, n): if blknos[i] != cur_blkno: - if cur_blkno not in group_dict: - group_order.append(cur_blkno) - group_dict[cur_blkno] = [(start, i)] - else: - group_dict[cur_blkno].append((start, i)) + group_dict[cur_blkno].append((start, i)) start = i cur_blkno = blknos[i] - if cur_blkno not in group_dict: - group_order.append(cur_blkno) - group_dict[cur_blkno] = [(start, n)] - else: - group_dict[cur_blkno].append((start, n)) + group_dict[cur_blkno].append((start, n)) - for blkno in group_order: - slices = group_dict[blkno] + for blkno, slices in group_dict.items(): if len(slices) == 1: yield blkno, slice(slices[0][0], slices[0][1]) else: