熊猫上个月开始

时间:2017-01-08 02:52:04

标签: 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'])})

如何在每个日期开始上个月?以下不适用于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

不喜欢这样。应该有更好的东西。

1 个答案:

答案 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