按grouby列聚合排名

ksi*_*ndi 4 python pandas

我想创建一个manager_ranksum回车对经理进行排名的列.我已经提出了下面发布的一个解决方案,但希望其他人有更优雅的东西.

import pandas as pd
df = pd.DataFrame([['2012', 'A', 1], ['2012', 'B', 4], ['2011', 'A', 5], ['2011', 'B', 4]],
                 columns=['year', 'manager', 'return'])
Run Code Online (Sandbox Code Playgroud)

期望的结果:

   year manager  return  manager_rank
0  2012       A       1             2
1  2011       A       5             2
2  2012       B       4             1
3  2011       B       4             1
Run Code Online (Sandbox Code Playgroud)

Ste*_*fan 5

df['ranking'] = df.groupby('manager')['return'].transform(np.sum).rank(ascending=False, method='dense')

   year manager  return  ranking
0  2012       A       1        2
1  2012       B       4        1
2  2011       A       5        2
3  2011       B       4        1
Run Code Online (Sandbox Code Playgroud)