@@ -315,13 +315,6 @@ def _get_items(self):
315
315
return self .axes [0 ]
316
316
items = property (fget = _get_items )
317
317
318
- def set_items_norename (self , value ):
319
- value = _ensure_index (value )
320
- self .axes [0 ] = value
321
-
322
- for block in self .blocks :
323
- block .set_ref_items (value , maybe_rename = False )
324
-
325
318
def __getstate__ (self ):
326
319
block_values = [b .values for b in self .blocks ]
327
320
block_items = [b .items for b in self .blocks ]
@@ -579,6 +572,12 @@ def consolidate(self):
579
572
new_blocks = _consolidate (self .blocks , self .items )
580
573
return BlockManager (new_blocks , self .axes )
581
574
575
+ def _consolidate_inplace (self ):
576
+ if self .is_consolidated ():
577
+ return
578
+
579
+ self .blocks = _consolidate (self .blocks , self .items )
580
+
582
581
def get (self , item ):
583
582
_ , block = self ._find_block (item )
584
583
return block .get (item )
@@ -619,7 +618,7 @@ def set(self, item, value):
619
618
if not block .should_store (value ):
620
619
# delete from block, create and append new block
621
620
self ._delete_from_block (i , item )
622
- self ._add_new_block (item , value )
621
+ self ._add_new_block (item , value , loc = None )
623
622
else :
624
623
block .set (item , value )
625
624
else :
@@ -632,8 +631,19 @@ def insert(self, loc, item, value):
632
631
633
632
new_items = self .items .insert (loc , item )
634
633
self .set_items_norename (new_items )
634
+
635
635
# new block
636
- self ._add_new_block (item , value )
636
+ self ._add_new_block (item , value , loc = loc )
637
+
638
+ if len (self .blocks ) > 20 :
639
+ self ._consolidate_inplace ()
640
+
641
+ def set_items_norename (self , value ):
642
+ value = _ensure_index (value )
643
+ self .axes [0 ] = value
644
+
645
+ for block in self .blocks :
646
+ block .set_ref_items (value , maybe_rename = False )
637
647
638
648
def _delete_from_block (self , i , item ):
639
649
"""
@@ -648,11 +658,12 @@ def _delete_from_block(self, i, item):
648
658
if new_right is not None :
649
659
self .blocks .append (new_right )
650
660
651
- def _add_new_block (self , item , value ):
661
+ def _add_new_block (self , item , value , loc = None ):
652
662
# Do we care about dtype at the moment?
653
663
654
664
# hm, elaborate hack?
655
- loc = self .items .get_loc (item )
665
+ if loc is None :
666
+ loc = self .items .get_loc (item )
656
667
new_block = make_block (value , self .items [loc :loc + 1 ].copy (),
657
668
self .items )
658
669
self .blocks .append (new_block )
0 commit comments