计算 pandas.period 中的四分之一长度

Calculating quarter length in pandas.period

示例代码:

months = [Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sept, Oct, Nov, Dec]
months = pd.period_range(start='2020-01', periods=12, freq='M')

for start, end in zip(months, months[11:]):

end_q = end.qyear

print(start, end, end_q)

# Output:
2020-01 2020-12 2020

此代码 returns 一个 window 具有 12 个月(开始、结束)和 window (end_q) 的最后一个季度。

我的问题是,如何衡量 end_q 在整个 window(开始、结束)中所占的百分比?

我知道如何计算 window 中第一个月的天数:

  first_month = start.month

  # number of days in first month (e.g., Jan)
  first_month_days = start.days_in_month

现在我想知道如何衡量 window 的最后三个月,欢迎任何建议! 谢谢!

编辑

示例结果(请注意,为简单起见,我假设每个月由 30 天组成):

要获得季度的范围,您可以执行以下操作来查看可以动态查看多年的三倍数:

n = 3
months = pd.period_range(start='2020-01', periods=12, freq='M')    
for i in range(len(months)):
    if i%n == 0:
        print(months[i], months[i+2], months[i+2].qyear, n/len(months))

2020-01 2020-03 2020 0.25
2020-04 2020-06 2020 0.25
2020-07 2020-09 2020 0.25
2020-10 2020-12 2020 0.25

基本就是这个方法

要仅获得第四季度(假设 12、24、36 个月等从 1 月开始的时期,这同样适用于多年期),您可以执行 if 语句对于 10 月,(x+3)/12 的其余部分等于 0,因此 return 9、21、33 等将是 October 多年的索引:

n=3
months = pd.period_range(start='2020-01', periods=48, freq='M')
for i in range(len(months)):
    if i>0 and (i+n)%12 == 0:
        print(months[i], months[i+2], months[i+2].qyear, n/len(months))

2020-10 2020-12 2020 0.0625
2021-10 2021-12 2021 0.0625
2022-10 2022-12 2022 0.0625
2023-10 2023-12 2023 0.0625

请注意,我在上面的代码中更改为 periods=48。如果您更改为 periods=12,则将 return:

2020-10 2020-12 2020 0.25