Приращение силы в методе рандов панд

Я ранжирую переменную с плавающей точкой в ​​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),

Другие вопросы по тегам