def slice_shift(self, periods=<NUM_LIT:1>, axis=<NUM_LIT:0>):
if periods == <NUM_LIT:0>:<EOL><INDENT>return self<EOL><DEDENT>if periods > <NUM_LIT:0>:<EOL><INDENT>vslicer = slice(None, -periods)<EOL>islicer = slice(periods, None)<EOL><DEDENT>else:<EOL><INDENT>vslicer = slice(-periods, None)<EOL>islicer = slice(None, periods)<EOL><DEDENT>new_obj = self._slice(vslicer, axis=axis)<EOL>shifted_axis = self._get_axis(axis)[islicer]<EOL>new_obj.set_axis(shifted_axis, axis=axis, inplace=True)<EOL>return new_obj.__finalize__(self)<EOL>
Equivalent to `shift` without copying data. The shifted data will
not include the dropped periods and the shifted axis will be smaller
than the original.

Parameters
----------
periods : int
    Number of periods to move, can be positive or negative

Returns
-------
shifted : same type as caller

Notes
-----
While the `slice_shift` is faster than `shift`, you may pay for it
later during alignment.