@@ -1516,15 +1516,28 @@ def reindex_items_from(self, new_ref_items, indexer=None, method=None, fill_valu
1516
1516
if indexer is None :
1517
1517
indexer = np .arange (len (self .items ))
1518
1518
1519
- new_values = com .take_1d (self .values .values , indexer )
1519
+ # single block
1520
+ if self .ndim == 1 :
1521
+
1522
+ new_items = new_ref_items
1523
+ new_values = com .take_1d (self .values .values , indexer )
1524
+
1525
+ else :
1526
+
1527
+ # if we don't overlap at all, then don't include this block
1528
+ new_items = self .items & new_ref_items
1529
+ if not len (new_items ):
1530
+ return None
1531
+
1532
+ new_values = self .values .values
1520
1533
1521
1534
# fill if needed
1522
1535
if method is not None or limit is not None :
1523
1536
if fill_value is None :
1524
1537
fill_value = self .fill_value
1525
1538
new_values = com .interpolate_2d (new_values , method = method , limit = limit , fill_value = fill_value )
1526
1539
1527
- return self .make_block (new_values , items = new_ref_items , ref_items = new_ref_items , copy = copy )
1540
+ return self .make_block (new_values , items = new_items , ref_items = new_ref_items , copy = copy )
1528
1541
1529
1542
def sparse_reindex (self , new_index ):
1530
1543
""" sparse reindex and return a new block
@@ -2794,15 +2807,34 @@ def reindex_items(self, new_items, indexer=None, copy=True, fill_value=None):
2794
2807
if indexer is None :
2795
2808
for blk in self .blocks :
2796
2809
if copy :
2797
- new_blocks . append ( blk .reindex_items_from (new_items ) )
2810
+ blk = blk .reindex_items_from (new_items )
2798
2811
else :
2799
2812
blk .ref_items = new_items
2813
+ if blk is not None :
2800
2814
new_blocks .append (blk )
2801
2815
else :
2802
- for block in self .blocks :
2803
- newb = block .reindex_items_from (new_items , copy = copy )
2804
- if len (newb .items ) > 0 :
2805
- new_blocks .append (newb )
2816
+
2817
+ # unique
2818
+ if self .axes [0 ].is_unique :
2819
+ for block in self .blocks :
2820
+
2821
+ newb = block .reindex_items_from (new_items , copy = copy )
2822
+ if newb is not None and len (newb .items ) > 0 :
2823
+ new_blocks .append (newb )
2824
+
2825
+ # non-unique
2826
+ else :
2827
+ rl = self ._set_ref_locs ()
2828
+ for i , idx in enumerate (indexer ):
2829
+ blk , lidx = rl [idx ]
2830
+ item = new_items .take ([i ])
2831
+ blk = make_block (_block_shape (blk .iget (lidx )),
2832
+ item ,
2833
+ new_items ,
2834
+ ndim = self .ndim ,
2835
+ fastpath = True ,
2836
+ placement = [i ])
2837
+ new_blocks .append (blk )
2806
2838
2807
2839
# add a na block if we are missing items
2808
2840
mask = indexer == - 1
0 commit comments