@@ -682,6 +682,10 @@ def reindex(self, major=None, items=None, minor=None, method=None,
682
682
major = _mut_exclusive (major , major_axis )
683
683
minor = _mut_exclusive (minor , minor_axis )
684
684
685
+ if (method is None and not self ._is_mixed_type and
686
+ com ._count_not_none (items , major , minor ) == 3 ):
687
+ return self ._reindex_multi (items , major , minor )
688
+
685
689
if major is not None :
686
690
result = result ._reindex_axis (major , method , 1 , copy )
687
691
@@ -696,6 +700,32 @@ def reindex(self, major=None, items=None, minor=None, method=None,
696
700
697
701
return result
698
702
703
+ def _reindex_multi (self , items , major , minor ):
704
+ a0 , a1 , a2 = len (items ), len (major ), len (minor )
705
+
706
+ values = self .values
707
+ new_values = np .empty ((a0 , a1 , a2 ), dtype = values .dtype )
708
+
709
+ new_items , indexer0 = self .items .reindex (items )
710
+ new_major , indexer1 = self .major_axis .reindex (major )
711
+ new_minor , indexer2 = self .minor_axis .reindex (minor )
712
+
713
+ if indexer0 is None :
714
+ indexer0 = range (len (new_items ))
715
+
716
+ if indexer1 is None :
717
+ indexer1 = range (len (new_major ))
718
+
719
+ if indexer2 is None :
720
+ indexer2 = range (len (new_minor ))
721
+
722
+ for i , ind in enumerate (indexer0 ):
723
+ com .take_2d_multi (values [ind ], indexer1 , indexer2 ,
724
+ out = new_values [i ])
725
+
726
+ return Panel (new_values , items = new_items , major_axis = new_major ,
727
+ minor_axis = new_minor )
728
+
699
729
def reindex_axis (self , labels , axis = 0 , method = None , level = None , copy = True ):
700
730
"""Conform Panel to new index with optional filling logic, placing
701
731
NA/NaN in locations having no value in the previous index. A new object
0 commit comments