You can use month periods for Series.dt.to_period for groups by months:
Series.dt.to_period
months = df['opened_at'].dt.to_period('m') for month, g in df.groupby(months): print (g)
1.4m articles
1.4m replys
5 comments
57.0k users