@@ -961,23 +961,20 @@ def diff(self, n):
961
961
return [make_block (new_values , self .items , self .ref_items ,
962
962
ndim = self .ndim , fastpath = True )]
963
963
964
- def shift (self , indexer , periods , axis = 0 ):
964
+ def shift (self , periods , axis = 0 ):
965
965
""" shift the block by periods, possibly upcast """
966
-
967
- new_values = self .values .take (indexer , axis = axis )
968
966
# convert integer to float if necessary. need to do a lot more than
969
967
# 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 )
972
970
axis_indexer = [ slice (None ) ] * self .ndim
973
971
if periods > 0 :
974
972
axis_indexer [axis ] = slice (None ,periods )
975
973
else :
976
- axis_indexer = [ slice (None ) ] * self .ndim
977
974
axis_indexer [axis ] = slice (periods ,None )
978
975
new_values [tuple (axis_indexer )] = fill_value
979
976
980
- return [make_block (new_values , self .items , self .ref_items ,
977
+ return [make_block (new_values . T , self .items , self .ref_items ,
981
978
ndim = self .ndim , fastpath = True )]
982
979
983
980
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):
1910
1907
values = self .values if inplace else self .values .copy ()
1911
1908
return [self .make_block (values .get_values (value ), fill_value = value )]
1912
1909
1913
- def shift (self , indexer , periods , axis = 0 ):
1910
+
1911
+ def shift (self , periods , axis = 0 ):
1914
1912
""" 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 )
1916
1919
new_values = self .values .to_dense ().take (indexer )
1917
1920
# convert integer to float if necessary. need to do a lot more than
1918
1921
# that, handle boolean etc also
0 commit comments