Source code for acore.enrichment_analysis.annotate
"""Put unique features into foreground, background or assign nan."""
from __future__ import annotations
import numpy as np
import pandas as pd
[docs]
def annotate_features(
features: pd.Series,
in_foreground: set[str] | list[str],
in_background: set[str] | list[str],
) -> pd.Series:
"""
Annotate features as foreground or background based on their presence in the
foreground and background lists.
:param features: pandas.Series with features and their annotations.
:param in_foreground: list of features identifiers in the foreground.
:type in_foreground: set or list-like
:param in_background: list of features identifiers in the background.
:type in_background: set or list-like
:return: pandas.Series containing 'foreground' or 'background'.
missing values are preserved.
Example::
result = _annotate_features(features, in_foreground, in_background)
"""
in_either_or = features.isin(in_foreground) | features.isin(in_background)
res = (
features.where(in_either_or, np.nan)
.mask(features.isin(in_foreground), "foreground")
.mask(features.isin(in_background), "background")
)
return res