从 Pandas 时间戳中查找下一个 Quarter/Month/Year/Bi-annual 日期
Find next Quarter/Month/Year/Bi-annual Date from Pandas Timestamp
我想找到一种方法,可以在给定 Pandas 时间戳的情况下为我提供下一个 month/quarter/year/bi-annual 日期。
如果时间戳已经是 month/quarter/year/bi-annual 日期的结尾,那么我可以获得下一个季度日期,如下所示:
pd.Timestamp('1999-12-31') + pd.tseries.offsets.DateOffset(months=3)
如果时间戳是 pd.Timestamp('1999-12-30')
,上面的方法将不起作用。
预期输出
input = pd.Timestamp('1999-12-30')
next_quarter_end = '2000-03-31'
next_month_end = '2000-01-31'
next_year_end = '2000-12-31'
next_biannual_end = '2000-06-30'
从技术上讲,Timestamp('1999-12-30')
之后的下一个季度末是 Timestamp('1999-12-31 00:00:00')
您可以使用pandas.tseries.offsets.QuarterEnd
>>> pd.Timestamp('1999-12-30') + pd.tseries.offsets.QuarterEnd()
Timestamp('1999-12-31 00:00:00')
>>> pd.Timestamp('1999-12-30') + pd.tseries.offsets.QuarterEnd()*2
Timestamp('2000-03-31 00:00:00')
同样,使用pandas.tseries.offsets.MonthEnd()
和pandas.tseries.offsets.YearEnd()
对于一年两次,我想你可以接受 2*QuarterEnd()
。
这行得通。我使用 pandas.tseries.offsets.QuarterEnd
, .MonthEnd
, and .YearEnd
,乘以根据输入而变化的特定因子,以获得您正在寻找的四个值。
date = pd.Timestamp('1999-12-31')
month_factor = 1 if date.day == date.days_in_month else 2
year_factor = 1 if date.day == date.days_in_month and date.month == 12 else 2
next_month_end = date + pd.tseries.offsets.MonthEnd() * month_factor
next_quarter_end = date + (pd.tseries.offsets.QuarterEnd() * month_factor)
next_year_end = date + pd.tseries.offsets.YearEnd() * year_factor
next_biannual_end = date + pd.tseries.offsets.DateOffset(months=6)
我想找到一种方法,可以在给定 Pandas 时间戳的情况下为我提供下一个 month/quarter/year/bi-annual 日期。
如果时间戳已经是 month/quarter/year/bi-annual 日期的结尾,那么我可以获得下一个季度日期,如下所示:
pd.Timestamp('1999-12-31') + pd.tseries.offsets.DateOffset(months=3)
如果时间戳是 pd.Timestamp('1999-12-30')
,上面的方法将不起作用。
预期输出
input = pd.Timestamp('1999-12-30')
next_quarter_end = '2000-03-31'
next_month_end = '2000-01-31'
next_year_end = '2000-12-31'
next_biannual_end = '2000-06-30'
从技术上讲,Timestamp('1999-12-30')
之后的下一个季度末是 Timestamp('1999-12-31 00:00:00')
您可以使用pandas.tseries.offsets.QuarterEnd
>>> pd.Timestamp('1999-12-30') + pd.tseries.offsets.QuarterEnd()
Timestamp('1999-12-31 00:00:00')
>>> pd.Timestamp('1999-12-30') + pd.tseries.offsets.QuarterEnd()*2
Timestamp('2000-03-31 00:00:00')
同样,使用pandas.tseries.offsets.MonthEnd()
和pandas.tseries.offsets.YearEnd()
对于一年两次,我想你可以接受 2*QuarterEnd()
。
这行得通。我使用 pandas.tseries.offsets.QuarterEnd
, .MonthEnd
, and .YearEnd
,乘以根据输入而变化的特定因子,以获得您正在寻找的四个值。
date = pd.Timestamp('1999-12-31')
month_factor = 1 if date.day == date.days_in_month else 2
year_factor = 1 if date.day == date.days_in_month and date.month == 12 else 2
next_month_end = date + pd.tseries.offsets.MonthEnd() * month_factor
next_quarter_end = date + (pd.tseries.offsets.QuarterEnd() * month_factor)
next_year_end = date + pd.tseries.offsets.YearEnd() * year_factor
next_biannual_end = date + pd.tseries.offsets.DateOffset(months=6)