@@ -961,23 +961,20 @@ def diff(self, n):
961961 return [make_block (new_values , self .items , self .ref_items ,
962962 ndim = self .ndim , fastpath = True )]
963963
964- def shift (self , indexer , periods , axis = 0 ):
964+ def shift (self , periods , axis = 0 ):
965965 """ shift the block by periods, possibly upcast """
966-
967- new_values = self .values .take (indexer , axis = axis )
968966 # convert integer to float if necessary. need to do a lot more than
969967 # that, handle boolean etc also
970- new_values , fill_value = com ._maybe_upcast (new_values )
971-
968+ new_values , fill_value = com ._maybe_upcast (self . values )
969+ new_values = np . roll ( new_values . T , periods , axis = axis )
972970 axis_indexer = [ slice (None ) ] * self .ndim
973971 if periods > 0 :
974972 axis_indexer [axis ] = slice (None ,periods )
975973 else :
976- axis_indexer = [ slice (None ) ] * self .ndim
977974 axis_indexer [axis ] = slice (periods ,None )
978975 new_values [tuple (axis_indexer )] = fill_value
979976
980- return [make_block (new_values , self .items , self .ref_items ,
977+ return [make_block (new_values . T , self .items , self .ref_items ,
981978 ndim = self .ndim , fastpath = True )]
982979
983980 def eval (self , func , other , raise_on_error = True , try_cast = False ):
@@ -1910,9 +1907,15 @@ def fillna(self, value, limit=None, inplace=False, downcast=None):
19101907 values = self .values if inplace else self .values .copy ()
19111908 return [self .make_block (values .get_values (value ), fill_value = value )]
19121909
1913- def shift (self , indexer , periods , axis = 0 ):
1910+
1911+ def shift (self , periods , axis = 0 ):
19141912 """ shift the block by periods """
1915-
1913+ N = len (self .values .T )
1914+ indexer = np .zeros (N , dtype = int )
1915+ if periods > 0 :
1916+ indexer [periods :] = np .arange (N - periods )
1917+ else :
1918+ indexer [:periods ] = np .arange (- periods , N )
19161919 new_values = self .values .to_dense ().take (indexer )
19171920 # convert integer to float if necessary. need to do a lot more than
19181921 # that, handle boolean etc also
0 commit comments