熊猫上个月开始

iwb*_*abn 2 datetime pandas

给定一个数据帧:

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'])})
Run Code Online (Sandbox Code Playgroud)

如何从上个月开始每个日期?以下不适用于6/5,并且有一些额外的时间部分.

pd.to_datetime(df['date'], format="%Y%m") + pd.Timedelta(-1,unit='M') + MonthBegin(0)
Run Code Online (Sandbox Code Playgroud)

编辑

我有一个解决方法(后退2步,前进1步):

(df['date']+ pd.Timedelta(-2,unit='M')+ MonthBegin(1)).dt.date
Run Code Online (Sandbox Code Playgroud)

不喜欢这个.应该有更好的东西.

roo*_*oot 7

您可以先减去MonthEnd前一个月的末尾,然后MonthBegin到达上个月的开头:

df['date'] - pd.offsets.MonthEnd() - pd.offsets.MonthBegin()
Run Code Online (Sandbox Code Playgroud)

结果输出:

0   2015-12-01
1   2016-01-01
2   2016-02-01
3   2016-03-01
4   2016-04-01
5   2016-05-01
Run Code Online (Sandbox Code Playgroud)