Ответ 1
Похоже, вы хотите сгруппировать с помощью 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)