Skip to main content
Version: Python


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


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


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



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.


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


An UpdateByOperation to be used in an update_by table operation.


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")]