@@ -952,7 +952,9 @@ def _chop(self, sdata, slice_obj: slice) -> NDFrame:
952
952
953
953
class SeriesSplitter (DataSplitter ):
954
954
def _chop (self , sdata : Series , slice_obj : slice ) -> Series :
955
- return sdata .iloc [slice_obj ]
955
+ # fastpath equivalent to `sdata.iloc[slice_obj]`
956
+ mgr = sdata ._mgr .get_slice (slice_obj )
957
+ return type (sdata )(mgr , name = sdata .name , fastpath = True )
956
958
957
959
958
960
class FrameSplitter (DataSplitter ):
@@ -962,10 +964,13 @@ def fast_apply(self, f: F, sdata: FrameOrSeries, names):
962
964
return libreduction .apply_frame_axis0 (sdata , f , names , starts , ends )
963
965
964
966
def _chop (self , sdata : DataFrame , slice_obj : slice ) -> DataFrame :
965
- if self .axis == 0 :
966
- return sdata .iloc [slice_obj ]
967
- else :
968
- return sdata .iloc [:, slice_obj ]
967
+ # Fastpath equivalent to:
968
+ # if self.axis == 0:
969
+ # return sdata.iloc[slice_obj]
970
+ # else:
971
+ # return sdata.iloc[:, slice_obj]
972
+ mgr = sdata ._mgr .get_slice (slice_obj , axis = 1 - self .axis )
973
+ return type (sdata )(mgr )
969
974
970
975
971
976
def get_splitter (
0 commit comments