Skip to content

Commit ade0418

Browse files
authored
REF: remove iterate_slices (#51622)
1 parent 025c56f commit ade0418

File tree

2 files changed

+11
-42
lines changed

2 files changed

+11
-42
lines changed

pandas/core/groupby/generic.py

+11-37
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
Any,
1616
Callable,
1717
Hashable,
18-
Iterable,
1918
Literal,
2019
Mapping,
2120
NamedTuple,
@@ -1337,38 +1336,27 @@ def _python_agg_general(self, func, *args, **kwargs):
13371336
func = com.is_builtin_func(func)
13381337
f = lambda x: func(x, *args, **kwargs)
13391338

1340-
# iterate through "columns" ex exclusions to populate output dict
1341-
output: dict[base.OutputKey, ArrayLike] = {}
1342-
13431339
if self.ngroups == 0:
13441340
# e.g. test_evaluate_with_empty_groups different path gets different
13451341
# result dtype in empty case.
13461342
return self._python_apply_general(f, self._selected_obj, is_agg=True)
13471343

1348-
for idx, obj in enumerate(self._iterate_slices()):
1349-
name = obj.name
1350-
result = self.grouper.agg_series(obj, f)
1351-
key = base.OutputKey(label=name, position=idx)
1352-
output[key] = result
1344+
obj = self._obj_with_exclusions
1345+
if self.axis == 1:
1346+
obj = obj.T
13531347

1354-
if not output:
1348+
if not len(obj.columns):
13551349
# e.g. test_margins_no_values_no_cols
13561350
return self._python_apply_general(f, self._selected_obj)
13571351

1358-
res = self._indexed_output_to_ndframe(output)
1359-
return self._wrap_aggregated_output(res)
1360-
1361-
def _iterate_slices(self) -> Iterable[Series]:
1362-
obj = self._obj_with_exclusions
1363-
if self.axis == 1:
1364-
obj = obj.T
1352+
output: dict[int, ArrayLike] = {}
1353+
for idx, (name, ser) in enumerate(obj.items()):
1354+
result = self.grouper.agg_series(ser, f)
1355+
output[idx] = result
13651356

1366-
if isinstance(obj, Series):
1367-
# Occurs when doing DataFrameGroupBy(...)["X"]
1368-
yield obj
1369-
else:
1370-
for label, values in obj.items():
1371-
yield values
1357+
res = self.obj._constructor(output)
1358+
res.columns = obj.columns.copy(deep=False)
1359+
return self._wrap_aggregated_output(res)
13721360

13731361
def _aggregate_frame(self, func, *args, **kwargs) -> DataFrame:
13741362
if self.grouper.nkeys != 1:
@@ -1830,20 +1818,6 @@ def _get_data_to_aggregate(
18301818
mgr = mgr.get_numeric_data(copy=False)
18311819
return mgr
18321820

1833-
def _indexed_output_to_ndframe(
1834-
self, output: Mapping[base.OutputKey, ArrayLike]
1835-
) -> DataFrame:
1836-
"""
1837-
Wrap the dict result of a GroupBy aggregation into a DataFrame.
1838-
"""
1839-
indexed_output = {key.position: val for key, val in output.items()}
1840-
columns = Index([key.label for key in output])
1841-
columns._set_names(self._obj_with_exclusions._get_axis(1 - self.axis).names)
1842-
1843-
result = self.obj._constructor(indexed_output)
1844-
result.columns = columns
1845-
return result
1846-
18471821
def _wrap_agged_manager(self, mgr: Manager2D) -> DataFrame:
18481822
return self.obj._constructor(mgr)
18491823

pandas/core/groupby/groupby.py

-5
Original file line numberDiff line numberDiff line change
@@ -1099,11 +1099,6 @@ def _insert_inaxis_grouper(self, result: Series | DataFrame) -> DataFrame:
10991099

11001100
return result
11011101

1102-
def _indexed_output_to_ndframe(
1103-
self, result: Mapping[base.OutputKey, ArrayLike]
1104-
) -> Series | DataFrame:
1105-
raise AbstractMethodError(self)
1106-
11071102
@final
11081103
def _maybe_transpose_result(self, result: NDFrameT) -> NDFrameT:
11091104
if self.axis == 1:

0 commit comments

Comments
 (0)