@@ -966,15 +966,24 @@ def shift(self, periods, axis=0):
966966 # convert integer to float if necessary. need to do a lot more than
967967 # that, handle boolean etc also
968968 new_values , fill_value = com ._maybe_upcast (self .values )
969- new_values = np .roll (new_values .T ,periods ,axis = axis )
969+ # make sure array sent to np.roll is c_contiguous
970+ f_ordered = new_values .flags .f_contiguous
971+ if f_ordered :
972+ new_values = new_values .T
973+ axis = new_values .ndim - axis - 1
974+ new_values = np .roll (new_values , periods , axis = axis )
970975 axis_indexer = [ slice (None ) ] * self .ndim
971976 if periods > 0 :
972977 axis_indexer [axis ] = slice (None ,periods )
973978 else :
974979 axis_indexer [axis ] = slice (periods ,None )
975980 new_values [tuple (axis_indexer )] = fill_value
976981
977- return [make_block (new_values .T , self .items , self .ref_items ,
982+ # restore original order
983+ if f_ordered :
984+ new_values = new_values .T
985+
986+ return [make_block (new_values , self .items , self .ref_items ,
978987 ndim = self .ndim , fastpath = True )]
979988
980989 def eval (self , func , other , raise_on_error = True , try_cast = False ):
0 commit comments