您可以使用groupby
然后使用rank
(ascending=False
首先获取最大值).您不需要对其进行排序groupby
,因为结果会被索引到数据帧(性能稍快).
df['yearly_rank'] = df.groupby('year', sort=False)['value'].rank(ascending=False) >>> df.sort_values(['year', 'yearly_rank']) value year yearly_rank 1 10 2006 1 0 5 2006 2 2 4 2007 1 3 1 2007 2