stats.comparison.rank_table

stats.comparison.rank_table(scores, *, method='min', ascending=True)

Rank entries under each metric column.

Converts a per-entry score table (e.g. mean MAE / RMSE / MAPE / MASE per entry) into integer ranks per metric, for concordance analysis (rank_concordance) or a rank-stability chart (spotforecast2.plots.comparison.plot_rank_stability).

Parameters

Name Type Description Default
scores pd.DataFrame Frame indexed by entry, one numeric column per metric. required
method str Tie-breaking method forwarded to pd.DataFrame.rank (e.g. "min", "average", "dense"). Defaults to "min". 'min'
ascending bool Whether lower scores rank first. Defaults to True. True

Returns

Name Type Description
pd.DataFrame pd.DataFrame: Integer ranks, same shape and labels as
pd.DataFrame scores.

Raises

Name Type Description
ValueError When scores is empty or contains NaN.

Examples

import pandas as pd
from spotforecast2_safe.stats.comparison import rank_table

scores = pd.DataFrame(
    {"mae": [510.0, 462.0, 891.0], "rmse": [640.0, 655.0, 1024.0]},
    index=["alpha", "beta", "gamma"],
)
ranks = rank_table(scores)
print(ranks.to_string())
assert list(ranks["mae"]) == [2, 1, 3]
       mae  rmse
alpha    2     1
beta     1     2
gamma    3     3