После трассировки я нахожу, что это связано с аргументом метода argsort из masked_array. Когда mstats.rankdata вызывает argsort, он не задает fill_value и входные параметры endwith, которые по умолчанию имеют значения np.nan и True соответственно. На основе следующего кода от numpy значение fill_value равно np.nan.
if fill_value is None:
if endwith:
# nan > inf
if np.issubdtype(self.dtype, np.floating):
fill_value = np.nan
Таким образом, в случае masked_array [1, 100], это argsorting [nan, 100], который равен [1, 0]. В случае masked_array [1, np.nan] это argsoring [nan, nan], который может быть [0,1]. Затем в функции rankdata предполагается, что первые n (n = 1) из аргумента argsort верны, что здесь неверно.
n = data.count()
rk = np.empty(data.size, dtype=float)
idx = data.argsort()
rk[idx[:n]] = np.arange(1,n+1)