pd.factorize
может сортировать список элементов и возвращать уникальные целочисленные метки:
In [209]: pd.factorize(['201611','201612','201701','201702','201704','201612'], sort=True)[0]+1
Out[209]: array([1, 2, 3, 4, 5, 2])
Поэтому вы можете использовать
df['Period'] = pd.factorize(df['Date'], sort=True)[0] + 1
pd.factorize
возвращает как массив меток, так и массив уникальных значений:
In [210]: pd.factorize(['201611','201612','201701','201702','201704','201612'], sort=True)
Out[210]:
(array([0, 1, 2, 3, 4, 1]),
array(['201611', '201612', '201701', '201702', '201704'], dtype=object))
Поскольку в этом вопросе кажется, что вам нужны только метки, я использовал pd.factorize(...)[0]
, чтобы получить только метки.