计算 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 天组成):
- 如果window 大小为 12 个月(360 天),最后一个季度(10 月、11 月、12 月)由 90 天组成,则结果应为:90 / 360 = 0.25
- 如果 windows 大小为 15 个月 (450) 并且上个季度(在 window 大小中)现在将是(明年的)一月、二月、三月,结果应该是: 90 / 450 = 0.2
要获得季度的范围,您可以执行以下操作来查看可以动态查看多年的三倍数:
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
示例代码:
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 天组成):
- 如果window 大小为 12 个月(360 天),最后一个季度(10 月、11 月、12 月)由 90 天组成,则结果应为:90 / 360 = 0.25
- 如果 windows 大小为 15 个月 (450) 并且上个季度(在 window 大小中)现在将是(明年的)一月、二月、三月,结果应该是: 90 / 450 = 0.2
要获得季度的范围,您可以执行以下操作来查看可以动态查看多年的三倍数:
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