【问题标题】:Calculating quarter length in pandas.period在 pandas.period 中计算四分之一长度
【发布时间】:2020-08-04 22:07:36
【问题描述】:

示例代码:

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

此代码返回一个包含 12 个月(开始、结束)和最后一个季度 (end_q) 的窗口。

我的问题是,如何测量 end_q 在整个窗口(开始、结束)中的百分比?

我知道如何在窗口中测量第一个月的天数:

  first_month = start.month

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

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

编辑

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

  • 如果窗口大小为 12 个月(360 天)且最后一个季度(10 月、11 月、12 月)由 90 天组成,则结果应为:90 / 360 = 0.25
  • 如果窗口大小是 15 个月 (450) 并且上个季度(在窗口大小中)现在将是一月、二月、三月(下一年),结果应该是:90 / 450 = 0.2

【问题讨论】:

  • measure the last three months of the window 你的预期输出是什么?

标签: python pandas zip window period


【解决方案1】:

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

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

这个方法基本

要仅获得第四季度(同样,假设从 1 月开始的 12、24、36 个月等期间,这将持续多年),您可以在 10 月执行 if 声明,其中(x+3)/12 的余数等于 0,因此将返回 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,则返回:

2020-10 2020-12 2020 0.25

【讨论】:

  • 谢谢 Erickson,我喜欢你的方法,但是我想保留 zip(months, months[11:]) 来遍历日期时间(因为这将是需要第二个任务)。另外,您提到此方法仅适用于多年。我真正需要的是能够计算过去三个月在整个窗口大小上的百分比(窗口大小可以变化:它可以是 12 个月,也可以是 15、18 或 21 等。因此添加三个月(月)的倍数)。
  • 请查看编辑以了解我的预期输出,谢谢!
  • 我希望在这里能更清楚地说明我的问题:stackoverflow.com/questions/63246196/… 如果您能看一下,将不胜感激,谢谢!
  • @Jack_T 很难确切地说出您在寻找什么,但我已经根据您的 cmets 更新了我的答案。不确定如何使用 zip 以及为什么/如何在以后的代码中需要 zip .我希望这会有所帮助。
  • 我会将这个问题标记为已完成,以感谢您的努力!如果您还有时间在这里查看 (stackoverflow.com/questions/63267605/…),请告诉我是否更容易理解我在寻找什么。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-17
  • 2020-12-15
  • 2015-04-12
  • 1970-01-01
  • 2012-11-02
  • 1970-01-01
相关资源
最近更新 更多