Skip to content

Commit 49daf14

Browse files
authored
REF: share _wrap_transform_fast_result (#43538)
1 parent 3d815ee commit 49daf14

File tree

2 files changed

+20
-23
lines changed

2 files changed

+20
-23
lines changed

pandas/core/groupby/generic.py

-23
Original file line numberDiff line numberDiff line change
@@ -500,16 +500,6 @@ def _transform_general(self, func: Callable, *args, **kwargs) -> Series:
500500
def _can_use_transform_fast(self, result) -> bool:
501501
return True
502502

503-
def _wrap_transform_fast_result(self, result: Series) -> Series:
504-
"""
505-
fast version of transform, only applicable to
506-
builtin/cythonizable functions
507-
"""
508-
ids, _, _ = self.grouper.group_info
509-
result = result.reindex(self.grouper.result_index, copy=False)
510-
out = algorithms.take_nd(result._values, ids)
511-
return self.obj._constructor(out, index=self.obj.index, name=self.obj.name)
512-
513503
def filter(self, func, dropna: bool = True, *args, **kwargs):
514504
"""
515505
Return a copy of a Series excluding elements from groups that
@@ -1271,19 +1261,6 @@ def _can_use_transform_fast(self, result) -> bool:
12711261
self._obj_with_exclusions.columns
12721262
)
12731263

1274-
def _wrap_transform_fast_result(self, result: DataFrame) -> DataFrame:
1275-
"""
1276-
Fast transform path for aggregations
1277-
"""
1278-
obj = self._obj_with_exclusions
1279-
1280-
# for each col, reshape to size of original frame by take operation
1281-
ids, _, _ = self.grouper.group_info
1282-
result = result.reindex(self.grouper.result_index, copy=False)
1283-
output = result.take(ids, axis=0)
1284-
output.index = obj.index
1285-
return output
1286-
12871264
def _define_paths(self, func, *args, **kwargs):
12881265
if isinstance(func, str):
12891266
fast_path = lambda group: getattr(group, func)(*args, **kwargs)

pandas/core/groupby/groupby.py

+20
Original file line numberDiff line numberDiff line change
@@ -1559,6 +1559,26 @@ def _transform(self, func, *args, engine=None, engine_kwargs=None, **kwargs):
15591559
# only reached for DataFrameGroupBy
15601560
return self._transform_general(func, *args, **kwargs)
15611561

1562+
@final
1563+
def _wrap_transform_fast_result(self, result: FrameOrSeries) -> FrameOrSeries:
1564+
"""
1565+
Fast transform path for aggregations.
1566+
"""
1567+
obj = self._obj_with_exclusions
1568+
1569+
# for each col, reshape to size of original frame by take operation
1570+
ids, _, _ = self.grouper.group_info
1571+
result = result.reindex(self.grouper.result_index, copy=False)
1572+
1573+
if self.obj.ndim == 1:
1574+
# i.e. SeriesGroupBy
1575+
out = algorithms.take_nd(result._values, ids)
1576+
output = obj._constructor(out, index=obj.index, name=obj.name)
1577+
else:
1578+
output = result.take(ids, axis=0)
1579+
output.index = obj.index
1580+
return output
1581+
15621582
# -----------------------------------------------------------------
15631583
# Utilities
15641584

0 commit comments

Comments
 (0)