featuretools.primitives.make_agg_primitive(function, input_types, return_type, name=None, stack_on_self=True, stack_on=None, stack_on_exclude=None, base_of=None, base_of_exclude=None, description='A custom primitive', cls_attributes=None, uses_calc_time=False, commutative=False)

Returns a new aggregation primitive class. The primitive infers default values by passing in empty data.

  • function (function) – Function that takes in an array and applies some transformation to it.
  • input_types (list[Variable]) – Variable types of the inputs.
  • return_type (Variable) – Variable type of return.
  • name (str) – Name of the function. If no name is provided, the name of function will be used.
  • stack_on_self (bool) – Whether this primitive can be in input_types of self.
  • stack_on (list[PrimitiveBase]) – Whitelist of primitives that can be input_types.
  • stack_on_exclude (list[PrimitiveBase]) – Blacklist of primitives that cannot be input_types.
  • base_of (list[PrimitiveBase) – Whitelist of primitives that can have this primitive in input_types.
  • base_of_exclude (list[PrimitiveBase]) – Blacklist of primitives that cannot have this primitive in input_types.
  • description (str) – Description of primitive.
  • cls_attributes (dict[str -> anytype]) – Custom attributes to be added to class. Key is attribute name, value is the attribute value.
  • uses_calc_time (bool) – If True, the cutoff time the feature is being calculated at will be passed to the function as the keyword argument ‘time’.
  • commutative (bool) – If True, will only make one feature per unique set of base features.


In [1]: from featuretools.primitives import make_agg_primitive

In [2]: from featuretools.variable_types import DatetimeTimeIndex, Numeric

In [3]: def time_since_last(values, time=None):
   ...:     time_since = time - values.iloc[0]
   ...:     return time_since.total_seconds()

In [4]: TimeSinceLast = make_agg_primitive(
   ...:     function=time_since_last,
   ...:     input_types=[DatetimeTimeIndex],
   ...:     return_type=Numeric,
   ...:     description="Time since last related instance",
   ...:     uses_calc_time=True)