Skip to main content
Version: Python

ems_time

ems_time creates a time-based EMS (exponential moving sum) for an update_by table operation. The formula for the time-based EMS of a column XX is:

ai=edtiτa_i = e^{\frac{-dt_i}{\tau}}

S0=x0\mathcal{S}_0 = x_0

Si=aiSi1+xi\mathcal{S}_i = a_i*\mathcal{S}_{i-1} + x_i

Where:

  • dtidt_i is the difference between time tit_i and ti1t_{i-1} in nanoseconds.
  • τ\tau is decay_time in nanoseconds, an input parameter to the method.
  • Si\mathcal{S}_i is the exponential moving sum of XX at time step ii.
  • xix_i is the current value.
  • ii denotes the time step, ranging from i=1i=1 to i=n1i = n-1, where nn is the number of elements in XX.

Syntax

ems_time(
ts_col: str,
decay_time: Union[int, str],
cols: list[str],
op_control: OperationControl = None
) -> UpdateByOperation

Parameters

ParameterTypeDescription
ts_colstr

The name of the column in the source table containing timestamps.

decay_timeUnion[int, str]

The decay rate. This can be expressed as an integer in nanoseconds or a string duration, e.g., "PT00:00:00.001" or "PTnHnMnS", where H is hour, M is minute, and S is second.

colsUnion[str, list[str]]

The string names of columns to be operated on. These can include expressions to rename the output, e.g., "new_col = col". When this parameter is left empty, update_by will perform the operation on all columns.

op_controlOperationControl

Defines how special cases should behave. When None, default OperationControl settings will be used. See OperationControl for information.

Returns

An UpdateByOperation to be used in an update_by table operation.

Examples

The following example performs an update_by on the source table using two ems_time operations.

from deephaven.updateby import ems_time
from deephaven.time import to_j_instant
from deephaven import empty_table

source = empty_table(20).update(
["Timestamp = '2023-05-01T00:00:00 ET' + i * SECOND", "X = randomInt(0,25)"]
)

result = source.update_by(
ops=[ems_time(ts_col="Timestamp", decay_time="PT00:01:00.000", cols="EmsX = X")]
)