python pandas rank by column

s = pd.DataFrame([['2012','A',3],['2012','B',8],['2011','A',20],['2011','B',30]], columns=['Year','Manager','Return']) Out[1]: Year Manager Return 0 2012 A 3 1 2012 B 8 2 2011 A 20 3 2011 B 30 

Я хотел бы создать ранг в год. Таким образом, в 2012 году менеджер B – 1. В 2011 году менеджер B снова 1.

Я некоторое время боролся с функцией ранжирования панд и НЕ хочу прибегать к циклу for.


Проблема, с которой я сталкиваюсь, связана с дополнительным кодом (не думал, что это будет актуально раньше):

 s = pd.DataFrame([['2012', 'A', 3], ['2012', 'B', 8], ['2011', 'A', 20], ['2011', 'B', 30]], columns=['Year', 'Manager', 'Return']) b = pd.DataFrame([['2012', 'A', 3], ['2012', 'B', 8], ['2011', 'A', 20], ['2011', 'B', 30]], columns=['Year', 'Manager', 'Return']) s= s.append(b) s['Rank'] = s.groupby(['Year'])['Return'].rank(ascending=False) raise Exception('Reindexing only valid with uniquely valued Index ' Exception: Reindexing only valid with uniquely valued Index objects 

Есть идеи?
Это реальная структура данных, которую я использую. Возникла проблема с переиндексацией.

One Solution collect form web for “python pandas rank by column”

Похоже, вы хотите сгруппировать по Year , затем ранжируйте Returns в порядке убывания:

 import pandas as pd s = pd.DataFrame([['2012', 'A', 3], ['2012', 'B', 8], ['2011', 'A', 20], ['2011', 'B', 30]], columns=['Year', 'Manager', 'Return']) s['Rank'] = s.groupby(['Year'])['Return'].rank(ascending=False) print(s) 

доходность

  Year Manager Return Rank 0 2012 A 3 2 1 2012 B 8 1 2 2011 A 20 2 3 2011 B 30 1 

Сообщение об ошибке:

 ValueError: cannot reindex from a duplicate axis 

происходит потому, что в индексе есть повторяющиеся значения. Вы можете избежать проблемы, построив s чтобы иметь уникальные значения после добавления:

 s = s.append(b, ignore_index=True) 

доходность

 In [51]: s Out[51]: Year Manager Return 0 2012 A 3 1 2012 B 8 2 2011 A 20 3 2011 B 30 0 2012 A 3 1 2012 B 8 2 2011 A 20 3 2011 B 30 

Или, после добавления, s может получить уникальный индекс, используя reset_index :

 s = s.append(b) s.reset_index(drop=True, inplace=True) 
  • Переименование столбцов при использовании resample
  • Какова точка зрения в пандах, если не определено, возвращает ли операция индексирования представление или копию?
  • Вычисление первого не пропущенного значения из каждого столбца в DataFrame
  • Как хранить фреймворк с помощью Pandas
  • MemoryError при больших слияниях с пандами в Python
  • Вставка новых строк в кадр данных pandas по определенным индексам
  • Преобразование текстовой таблицы в pandas dataframe
  • TypeError: unhashable type: 'list' при использовании groupby в python
  • Python - лучший язык программирования в мире.