NOTICE

The upcoming release of Featuretools 1.0.0 contains several breaking changes. Users are encouraged to test this version prior to release by installing from GitHub:

pip install https://github.com/alteryx/featuretools/archive/woodwork-integration.zip

For details on migrating to the new version, refer to Transitioning to Featuretools Version 1.0. Please report any issues in the Featuretools GitHub repo or by messaging in Alteryx Open Source Slack.


featuretools.primitives.make_trans_primitive

featuretools.primitives.make_trans_primitive(function, input_types, return_type, name=None, description=None, cls_attributes=None, uses_calc_time=False, commutative=False, number_output_features=1)[source]

Returns a new transform primitive class

Parameters
  • function (function) – Function that takes in a series and applies some transformation to it.

  • input_types (list[ColumnSchema]) – ColumnSchema of the inputs.

  • return_type (ColumnSchema) – ColumnSchema of returned feature.

  • name (str) – Name of the primitive. If no name is provided, the name of function will be used.

  • 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.

  • number_output_features (int) – The number of output features (columns in the matrix) associated with this feature.

Example

In [1]: from featuretools.primitives import make_trans_primitive

In [2]: from woodwork.column_schema import ColumnSchema

In [3]: from woodwork.logical_types import Boolean

In [4]: def pd_is_in(array, list_of_outputs=None):
   ...:     if list_of_outputs is None:
   ...:         list_of_outputs = []
   ...:     return pd.Series(array).isin(list_of_outputs)
   ...: 

In [5]: def isin_generate_name(self):
   ...:     return u"%s.isin(%s)" % (self.base_features[0].get_name(),
   ...:                              str(self.kwargs['list_of_outputs']))
   ...: 

In [6]: IsIn = make_trans_primitive(
   ...:     function=pd_is_in,
   ...:     input_types=[ColumnSchema()],
   ...:     return_type=ColumnSchema(logical_type=Boolean),
   ...:     name="is_in",
   ...:     description="For each value of the base feature, checks "
   ...:     "whether it is in a list that provided.",
   ...:     cls_attributes={"generate_name": isin_generate_name})
   ...: