The fastest factorize solution:
df['Rank'] = pd.factorize(df.Year)[0] + 1
Delay
#len(df)=40k df = pd.concat([df]*10000).reset_index(drop=True) In [13]: %timeit df['Rank'] = df.Year.rank(method='dense').astype(int) 1000 loops, best of 3: 1.55 ms per loop In [14]: %timeit df['Rank1'] = df.Year.astype('category').cat.codes + 1 1000 loops, best of 3: 1.22 ms per loop In [15]: %timeit df['Rank2'] = pd.factorize(df.Year)[0] + 1 1000 loops, best of 3: 737 ยตs per loop
source share