Source code for recsys_metrics_polars.utils

import polars as pl

from .constants import RANK_COL
from .data_info import DataInfo


[docs] def join_true_recs_and_preprocess( true_interactions: pl.DataFrame, recommendations: pl.DataFrame, data_info: DataInfo, ) -> pl.DataFrame: """Join two tables and compute ranks based on :py:attr:`.DataInfo.score_col` :param true_interactions: :param recommendations: """ data = true_interactions.lazy().join( recommendations.lazy().with_columns( pl.when(pl.col(data_info.score_col).is_not_null()) .then(pl.col(data_info.score_col).rank(method="ordinal", descending=True).over(data_info.query_id_cols)) .otherwise(pl.lit(None)) .alias(RANK_COL) ), how="left", on=data_info.query_id_cols + [data_info.item_col], ) return data.collect()