def agg(self) -> FrameOrSeriesUnion | None: """ Provide an implementation for the aggregators. Returns ------- Result of aggregation, or None if agg cannot be performed by this method. """ obj = self.obj arg = self.f args = self.args kwargs = self.kwargs if isinstance(arg, str): return self.apply_str() if is_dict_like(arg): return self.agg_dict_like() elif is_list_like(arg): # we require a list, but not a 'str' return self.agg_list_like() if callable(arg): f = com.get_cython_func(arg) if f and not args and not kwargs: return getattr(obj, f)() # caller can react return None
def transform_str_or_callable(self, func) -> FrameOrSeriesUnion: """ Compute transform in the case of a string or callable func """ obj = self.obj args = self.args kwargs = self.kwargs if isinstance(func, str): return self._try_aggregate_string_function(obj, func, *args, **kwargs) if not args and not kwargs: f = com.get_cython_func(func) if f: return getattr(obj, f)() # Two possible ways to use a UDF - apply or call directly try: return obj.apply(func, args=args, **kwargs) except Exception: return func(obj, *args, **kwargs)