Source code for featuretools.primitives.standard.aggregation.num_zero_crossings

import numpy as np
from woodwork.column_schema import ColumnSchema
from woodwork.logical_types import Integer

from featuretools.primitives.base import AggregationPrimitive


[docs]class NumZeroCrossings(AggregationPrimitive): """Determines the number of times a list crosses 0. Description: Given a list of numbers, return the number of times the value crosses 0. It is the number of times the value goes from a positive number to a negative number, or a negative number to a positive number. NaN values are ignored. Examples: >>> num_zero_crossings = NumZeroCrossings() >>> num_zero_crossings([1, -1, 2, -2, 3, -3]) 5 """ name = "num_zero_crossings" input_types = [ColumnSchema(semantic_tags={"numeric"})] return_type = ColumnSchema(logical_type=Integer, semantic_tags={"numeric"}) def get_function(self): def num_zero_crossings(x): cleaned = x[(x != 0) & (x == x)] signs = np.sign(cleaned) difference = np.diff(signs) crossings = np.where(difference)[0] return len(crossings) return num_zero_crossings