给定一个数据框:
df = pd.DataFrame({'c':[0,1,1,2,2,2],'date':pd.to_datetime(['2016-01-01','2016-02-01','2016-03-01','2016-04-01','2016-05-01','2016-06-05'])})
如何让每个日期的上个月开始?以下不适用于 6/5 并且有一些额外的时间部分。
pd.to_datetime(df['date'], format="%Y%m") + pd.Timedelta(-1,unit='M') + MonthBegin(0)
编辑
我有一个解决方法(后退 2 步,前进 1 步):
(df['date']+ pd.Timedelta(-2,unit='M')+ MonthBegin(1)).dt.date
不喜欢这个。应该有更好的东西。
最佳答案
你可以先减去MonthEnd
到上个月的月底,然后 MonthBegin
到上个月的开始:
df['date'] - pd.offsets.MonthEnd() - pd.offsets.MonthBegin()
结果输出:
0 2015-12-01
1 2016-01-01
2 2016-02-01
3 2016-03-01
4 2016-04-01
5 2016-05-01
关于datetime - Pandas 上个月开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41528970/