计算季度结束日期

时间:2021-02-10 10:19:37

标签: python python-3.x pandas date

我正在尝试查找两个日期之间的所有季度结束日期。我还想使用当前/正在进行的季度的最大日期。

def calculate_quarters(start_yyyy_mm_dd, end_yyyy_mm_dd):
     ...
     ...
     ...

x = calculate_quarters('2020-01-01', '2021-01-07')
print(x)

> ['2020-03-31', '2020-06-30', '2020-09-30', '2020-12-31', '2021-01-07']

我查看了之前的一些答案,发现我们可以这样计算季度末:

>>> d = datetime.date.today()
>>> datetime.date(year=d.year, month=((d.month % 3) + 1) * 3 + 1, day=1) - datetime.timedelta(days=1)
datetime.date(2015, 9, 30)

但是我不确定如何使其适应范围并处理不完整的季度。

1 个答案:

答案 0 :(得分:1)

如果只需要匹配两个日期之间的季度,则使用 period_range 作为四分,转换为 PeriodIndex.to_timestamp 的时间戳,DatetimeIndex.normalize 的下限,如果范围不存在,则最后添加最后一个不完整的结束时间戳Index.union

def calculate_quarters(s, e):
    r = pd.period_range(s, e, freq='Q').to_timestamp(how='end').normalize()
    return r[(r > s) & (r < e)].union(pd.to_datetime([e])).strftime('%Y-%m-%d').tolist()


print (calculate_quarters('2020-01-01', '2021-01-07'))
['2020-03-31', '2020-06-30', '2020-09-30', '2020-12-31','2021-01-07']
               

def calculate_quarters(s, e):
    r = pd.period_range(s, e, freq='Q').to_timestamp(how='end').normalize()
    return r[(r > s) & (r < e)].union(pd.to_datetime([e])).strftime('%Y-%m-%d').tolist()


print (calculate_quarters('2020-01-01', '2020-12-31'))
['2020-03-31', '2020-06-30', '2020-09-30', '2020-12-31']