Python 使用DateOffset查找随机日期前一个月的第一天

Python 使用DateOffset查找随机日期前一个月的第一天,python,pandas,Python,Pandas,我想找到一个月的第一天,一个随机日期前的平均90天。例如: 十二月十五日至八月三十日 十二月三十日至八月三十日 12月1日至8月30日 我知道这可以通过Pandas pd.DateOffset完成: print(pd.Timestamp("2019-12-15") - pd.DateOffset(days=90)) 但我会得到像9月15日这样的东西 我知道我可以数减去90天,选择月份,减去1,然后选择所获得月份的最后一天,但我想知道这是否可以用一行代码轻松高效地完成。假设所讨论的日期是: d

我想找到一个月的第一天,一个随机日期前的平均90天。例如:

十二月十五日至八月三十日 十二月三十日至八月三十日 12月1日至8月30日

我知道这可以通过Pandas pd.DateOffset完成:

print(pd.Timestamp("2019-12-15") - pd.DateOffset(days=90)) 
但我会得到像9月15日这样的东西


我知道我可以数减去90天,选择月份,减去1,然后选择所获得月份的最后一天,但我想知道这是否可以用一行代码轻松高效地完成。

假设所讨论的日期是:

dat = pd.Timestamp('2019-12-15')
要计算90天前的日期,请运行:

dat2 = dat - pd.DateOffset(days=90)
2019-09-16

最后,要在本月初开始,请运行:

dat2 - pd.offsets.MonthBegin(0)
dat2 - pd.offsets.MonthBegin(1)
获得2019-09-01

简而言之,只需跑:

dat - pd.DateOffset(days=90) - pd.offsets.MonthBegin(0)
如果你从一个日期开始,一个细微的差别就会显现出来,而这个日期 往回翻了90天,只剩下一个月的第一天了。例如

dat = pd.Timestamp('2019-11-30')
dat2 = dat - pd.DateOffset(days=90)
给出2019-09-01

然后dat2-pd.offsets.MonthBegin0给出了相同的日期

如果在这种情况下需要上个月的开始日期,请运行:

dat2 - pd.offsets.MonthBegin(0)
dat2 - pd.offsets.MonthBegin(1)
注意参数改为1,得到2019-08-01


因此,选择适合您需要的变体。

如果您想要月的第一天,为什么要在30号返回?另外,8月有31天。。。但这可能会有所帮助:pd.Timestamp'2019-12-15'-pd.offsets.MonthEnd4返回日期前四个月的最后一天。。。在这种情况下,2019-08-31。如果您正好需要90天,那么上个月的最后一天,只需在减去90天之后减去pd.offsets.MonthEnd。。。