Приращение силы в методе рандов панд
Я ранжирую переменную с плавающей точкой в Pandas и хочу, чтобы ранги были уникальными (без дубликатов в случае связей).
Вот что происходит:
vals = pd.Series([0.0133, 0.0018, np.nan, 0.0006, 0.0006])
vals.rank(ascending=False, method='dense')
0 1.0
1 2.0
2 NaN
3 3.0
4 3.0
Я хотел бы, чтобы результат был вместо
0 1.0
1 2.0
2 NaN
3 3.0
4 4.0
Могу ли я сделать это с rank
метод или я должен сделать это вручную с некоторой логикой сортировки и зацикливания?
2 ответа
Ты можешь использовать first
для метода (см. документы Series.rank):
первый: ранги назначаются в порядке их появления в массиве
ser = pd.Series([1, 2, np.nan, 3, 3, 4])
ser.rank(method='first')
Out:
0 1.0
1 2.0
2 NaN
3 3.0
4 4.0
5 5.0
dtype: float64
Чтобы уточнить ответ айхана на это (поскольку у меня недостаточно репутации, чтобы редактировать или комментировать!)
df.rank(method=first)
будет работать, только если DF отсортирован так, как вы хотите.
Поэтому вам нужно сначала отсортировать ваш фрейм данных, используя df.sort_values()
тогда вы можете оценить его с df.rank(method=first)
,