Ранжировать массив: исключить NaN и присвоить наименьший ранг наибольшему числу
У меня есть строка array / pandas:
array = [0.8, np.nan, 0.1, -0.5, 0.7]
Мне нужен такой вывод:
array = [1, np.nan, 3, 4, 2]
Эти методы ранжируются в неправильном для меня направлении:
scipy.stats.mstats.rankdata
scipy.stats.rankdata
2 ответа:
Поскольку вы упомянули панд, вы можете использовать серию .ранг Метод:
arr = [0.8, np.nan, 0.1, -0.5, 0.7] pd.Series(arr).rank(ascending=False) Out: 0 1.0 1 NaN 2 3.0 3 4.0 4 2.0 dtype: float64
Это создает и возвращает серию панд. Если вы хотите избежать создания ряда, как было отмечено в комментариях @ajcr,вы можете использовать функцию rank. Это возвращает ndarray:
pd.algos.rank_1d_float64(arr, ascending=False) Out: array([ 1., nan, 3., 4., 2.])