@@ -966,15 +966,24 @@ def shift(self, periods, axis=0):
966
966
# convert integer to float if necessary. need to do a lot more than
967
967
# that, handle boolean etc also
968
968
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 )
970
975
axis_indexer = [ slice (None ) ] * self .ndim
971
976
if periods > 0 :
972
977
axis_indexer [axis ] = slice (None ,periods )
973
978
else :
974
979
axis_indexer [axis ] = slice (periods ,None )
975
980
new_values [tuple (axis_indexer )] = fill_value
976
981
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 ,
978
987
ndim = self .ndim , fastpath = True )]
979
988
980
989
def eval (self , func , other , raise_on_error = True , try_cast = False ):
0 commit comments