Используйте cut
с DatetimeIndex.year
для решения, если необходимо добавить / удалить больше групп:
a = pd.cut(date_series.year,
bins=[-np.inf, 2012, 2014, np.inf],
labels=['before 2012','2012 - 2014','after 2014'])
print (a.value_counts())
before 2012 25
2012 - 2014 24
after 2014 48
dtype: int64
Другое решение с numpy.select
:
x = date_series.year
a = np.select([x <= 2012, x>= 2014], ['before 2012','after 2014'], '2012 - 2014')
print (pd.Series(a).value_counts())
after 2014 60
before 2012 25
2012 - 2014 12
dtype: int64
Ваше решение следует заменить на вложенное if-else
, но если большие данные, оно должно быть медленным:
regime_splitter = (lambda x: 'before 2012' if x <= 2012 else
('2012 - 2014' if x>= 2012 and x <= 2014 else 'after 2014'))
a = date_series.year.map(regime_splitter)
print (a.value_counts())
after 2014 48
before 2012 25
2012 - 2014 24
dtype: int64