给定数据框:
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
不喜欢这样。应该有更好的东西。
答案 0 :(得分:7)
您可以先将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