Необходимая функциональность обеспечивается функцией rollback
:
ts1 = '2016-03-05 00:20:02'
ts2 = '2016-03-01 00:20:02'
ts3 = '2016-03-31 00:20:02'
pd.offsets.MonthBegin().rollback(ts1)
#Timestamp('2016-03-01 00:20:02')
pd.offsets.MonthBegin().rollback(ts2)
#Timestamp('2016-03-01 00:20:02')
pd.offsets.MonthBegin().rollback(ts3)
#Timestamp('2016-03-01 00:20:02')
Если у вас есть столбец даты и времени и вы хотите сократить его до месяцев, вы можететакже временно изменить точность базового типа numpy
datetime64
:
df = pd.DataFrame({'Date': ['2016-03-05 00:20:02', '2016-03-01 00:20:02', '2016-03-31 00:20:02']})
df.Date = pd.to_datetime(df.Date)
df['Month'] = df.Date.astype('<M8[M]')
print(df)
# Date Month
#0 2016-03-05 00:20:02 2016-03-01
#1 2016-03-01 00:20:02 2016-03-01
#2 2016-03-31 00:20:02 2016-03-01
(взято из этого SO ответа)