2016-11-20 2 views
5

Я ранга переменной с плавающей точкой в ​​панд, и я хочу, чтобы заставить ряды не быть уникальнымиForce инкрементации в методе панды ранга

Это то, что происходит (не повторяющихся рангов в случае связей.):

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 или я должен сделать это вручную с некоторой сортировкой и перекручивания логики?

ответ

6

Вы можете использовать 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 
+3

Я не знаю, кто бы это оценил. Это идеальный ответ. – piRSquared

+2

@piRSquared, полностью согласен. – MaxU

+0

@piRSquared, такой же здесь. Это сработало отлично (это всегда что-то очевидно). Благодаря! – Chris

1

Чтобы уточнить ответ Айхан на этом (так как у меня недостаточно репутации для редактирования или комментария!)

df.rank(method=first) будет работать только если DF сортируется так, как вы хотите.

Итак, вам необходимо сначала отсортировать данные по df.sort_values(), после чего вы можете оценить его с помощью df.rank(method=first).

Смежные вопросы