Source code for biopsykit.signals.ecg.transformation._normalization

import pandas as pd
from tpcp import Algorithm, Parameter

__all__ = ["HeartRateNormalization"]

from typing_extensions import Self

from biopsykit.utils._types_internal import str_t


[docs]class HeartRateNormalization(Algorithm): _action_methods = ("apply",) group_level: Parameter[str_t] norm_level: Parameter[str] output_: pd.DataFrame def __init__( self, *, group_level: str_t, norm_level: str, ): self.group_level = group_level self.norm_level = norm_level
[docs] def apply(self, data: pd.DataFrame, *, key: str) -> Self: mean_hr = data["heart_rate_bpm"].xs(key, level=self.norm_level).groupby(self.group_level).mean() data_norm = ( data["heart_rate_bpm"] .groupby(self.group_level, group_keys=False) .apply(lambda df: 100 - 100 * (df / mean_hr.loc[df.name])) ) data_norm = data_norm.to_frame(name="heart_rate_normalized_percent") self.output_ = data_norm return self