@@ -1048,7 +1048,7 @@ def xs(self, key, axis=1, copy=True):
1048
1048
self ._consolidate_inplace ()
1049
1049
axis_number = self ._get_axis_number (axis )
1050
1050
new_data = self ._data .xs (key , axis = axis_number , copy = copy )
1051
- return self ._constructor_sliced (new_data )
1051
+ return self ._construct_return_type (new_data )
1052
1052
1053
1053
_xs = xs
1054
1054
@@ -1263,24 +1263,33 @@ def _reduce(self, op, axis=0, skipna=True):
1263
1263
if result .ndim == 2 and axis_name != self ._info_axis :
1264
1264
result = result .T
1265
1265
1266
- return self ._constructor_sliced (result ,
1266
+ return self ._construct_return_type (result , axes )
1267
+
1268
+ def _construct_return_type (self , result , axes = None , ** kwargs ):
1269
+ """ return the type for the ndim of the result """
1270
+ ndim = result .ndim
1271
+ if self .ndim == ndim :
1272
+ """ return the construction dictionary for these axes """
1273
+ if axes is None :
1274
+ return self ._constructor (result )
1275
+ return self ._constructor (result , ** self ._construct_axes_dict ())
1276
+
1277
+ elif self .ndim == ndim + 1 :
1278
+ if axes is None :
1279
+ return self ._constructor_sliced (result )
1280
+ return self ._constructor_sliced (result ,
1267
1281
** self ._extract_axes_for_slice (self , axes ))
1268
1282
1283
+ raise PandasError ("invalid _construct_return_type [self->%s] [result->%s]" %
1284
+ (self .ndim , result .ndim ))
1285
+
1269
1286
def _wrap_result (self , result , axis ):
1270
1287
axis = self ._get_axis_name (axis )
1271
1288
axes = self ._get_plane_axes (axis )
1272
1289
if result .ndim == 2 and axis != self ._info_axis :
1273
1290
result = result .T
1274
1291
1275
- # do we have reduced dimensionalility?
1276
- if self .ndim == result .ndim :
1277
- return self ._constructor (result , ** self ._construct_axes_dict ())
1278
- elif self .ndim == result .ndim + 1 :
1279
- return self ._constructor_sliced (result ,
1280
- ** self ._extract_axes_for_slice (self , axes ))
1281
-
1282
- raise PandasError ("invalid _wrap_result [self->%s] [result->%s]" %
1283
- (self .ndim , result .ndim ))
1292
+ return self ._construct_return_type (result , axes )
1284
1293
1285
1294
def count (self , axis = 'major' ):
1286
1295
"""
0 commit comments