|
89 | 89 | MultiIndex, |
90 | 90 | all_indexes_same, |
91 | 91 | ) |
92 | | -import pandas.core.indexes.base as ibase |
93 | 92 | from pandas.core.series import Series |
94 | 93 | from pandas.core.util.numba_ import maybe_use_numba |
95 | 94 |
|
@@ -481,14 +480,13 @@ def _get_index() -> Index: |
481 | 480 | if isinstance(values[0], dict): |
482 | 481 | # GH #823 #24880 |
483 | 482 | index = _get_index() |
484 | | - result: FrameOrSeriesUnion = self._reindex_output( |
485 | | - self.obj._constructor_expanddim(values, index=index) |
486 | | - ) |
| 483 | + res_df = self.obj._constructor_expanddim(values, index=index) |
| 484 | + res_df = self._reindex_output(res_df) |
487 | 485 | # if self.observed is False, |
488 | 486 | # keep all-NaN rows created while re-indexing |
489 | | - result = result.stack(dropna=self.observed) |
490 | | - result.name = self._selection_name |
491 | | - return result |
| 487 | + res_ser = res_df.stack(dropna=self.observed) |
| 488 | + res_ser.name = self._selection_name |
| 489 | + return res_ser |
492 | 490 | elif isinstance(values[0], (Series, DataFrame)): |
493 | 491 | return self._concat_objects(keys, values, not_indexed_same=not_indexed_same) |
494 | 492 | else: |
@@ -1019,13 +1017,18 @@ def aggregate(self, func=None, *args, engine=None, engine_kwargs=None, **kwargs) |
1019 | 1017 |
|
1020 | 1018 | # grouper specific aggregations |
1021 | 1019 | if self.grouper.nkeys > 1: |
| 1020 | + # test_groupby_as_index_series_scalar gets here with 'not self.as_index' |
1022 | 1021 | return self._python_agg_general(func, *args, **kwargs) |
1023 | 1022 | elif args or kwargs: |
| 1023 | + # test_pass_args_kwargs gets here (with and without as_index) |
| 1024 | + # can't return early |
1024 | 1025 | result = self._aggregate_frame(func, *args, **kwargs) |
1025 | 1026 |
|
1026 | 1027 | elif self.axis == 1: |
1027 | 1028 | # _aggregate_multiple_funcs does not allow self.axis == 1 |
| 1029 | + # Note: axis == 1 precludes 'not self.as_index', see __init__ |
1028 | 1030 | result = self._aggregate_frame(func) |
| 1031 | + return result |
1029 | 1032 |
|
1030 | 1033 | else: |
1031 | 1034 |
|
@@ -1055,7 +1058,7 @@ def aggregate(self, func=None, *args, engine=None, engine_kwargs=None, **kwargs) |
1055 | 1058 |
|
1056 | 1059 | if not self.as_index: |
1057 | 1060 | self._insert_inaxis_grouper_inplace(result) |
1058 | | - result.index = np.arange(len(result)) |
| 1061 | + result.index = Index(range(len(result))) |
1059 | 1062 |
|
1060 | 1063 | return result._convert(datetime=True) |
1061 | 1064 |
|
@@ -1181,7 +1184,9 @@ def _wrap_applied_output(self, data, keys, values, not_indexed_same=False): |
1181 | 1184 | if self.as_index: |
1182 | 1185 | return self.obj._constructor_sliced(values, index=key_index) |
1183 | 1186 | else: |
1184 | | - result = DataFrame(values, index=key_index, columns=[self._selection]) |
| 1187 | + result = self.obj._constructor( |
| 1188 | + values, index=key_index, columns=[self._selection] |
| 1189 | + ) |
1185 | 1190 | self._insert_inaxis_grouper_inplace(result) |
1186 | 1191 | return result |
1187 | 1192 | else: |
@@ -1664,8 +1669,8 @@ def _wrap_transformed_output( |
1664 | 1669 |
|
1665 | 1670 | def _wrap_agged_manager(self, mgr: Manager2D) -> DataFrame: |
1666 | 1671 | if not self.as_index: |
1667 | | - index = np.arange(mgr.shape[1]) |
1668 | | - mgr.set_axis(1, ibase.Index(index)) |
| 1672 | + index = Index(range(mgr.shape[1])) |
| 1673 | + mgr.set_axis(1, index) |
1669 | 1674 | result = self.obj._constructor(mgr) |
1670 | 1675 |
|
1671 | 1676 | self._insert_inaxis_grouper_inplace(result) |
@@ -1793,7 +1798,7 @@ def nunique(self, dropna: bool = True) -> DataFrame: |
1793 | 1798 | results.columns.names = obj.columns.names # TODO: do at higher level? |
1794 | 1799 |
|
1795 | 1800 | if not self.as_index: |
1796 | | - results.index = ibase.default_index(len(results)) |
| 1801 | + results.index = Index(range(len(results))) |
1797 | 1802 | self._insert_inaxis_grouper_inplace(results) |
1798 | 1803 |
|
1799 | 1804 | return results |
|
0 commit comments