从日期数组创建日期范围

Create date ranges from an array of dates

假设我有以下 array 个日期(不一定排序):

import numpy as np
np.array(["2000Q1", "2000Q2", "2000Q3", "2000Q4", "2001Q1", "2001Q2", "2001Q3", "2001Q4", "2002Q1",
 "2002Q2", "2002Q3", "2002Q4", "2003Q1", "2003Q2", "2003Q3", "2003Q4", "2004Q1", "2004Q2", "2004Q3",
  "2004Q4", "2005Q1", "2005Q2", "2005Q3", "2005Q4", "2006Q1", "2006Q2", "2006Q3", "2006Q4", "2007Q1",
  "2007Q2", "2007Q3", "2007Q4", "2008Q1", "2008Q2", "2008Q3", "2008Q4", "2009Q1", "2009Q2", "2009Q3",
  "2009Q4"])

据此我想为 start-dateend-date 创建一个包含 2 列的 DataFrame,其中此日期对应于 date range 的开始日期和 date range 的结束日期 date rage 跨越 4 years。这将对上面 array 的每个元素继续,直到最后一个元素。例如,这个新 DataFrame 的前 3 行如下所示

在Python中有没有直接的function/method实现上面的?

这是在 pandas 中使用 PeriodIndexDateOffset 函数的一种方法。请注意,我在下面将您的数组命名为 arr

df = pd.DataFrame({'start-date': arr, 
                   'end-date': (pd.PeriodIndex(arr, freq='Q').to_timestamp() + 
                                pd.DateOffset(years=4, months=10)).to_period('Q')})

输出:

   start-date end-date
0      2000Q1   2004Q4
1      2000Q2   2005Q1
2      2000Q3   2005Q2
3      2000Q4   2005Q3
4      2001Q1   2005Q4
5      2001Q2   2006Q1
6      2001Q3   2006Q2
7      2001Q4   2006Q3
8      2002Q1   2006Q4
9      2002Q2   2007Q1
10     2002Q3   2007Q2
11     2002Q4   2007Q3
12     2003Q1   2007Q4
13     2003Q2   2008Q1
14     2003Q3   2008Q2
15     2003Q4   2008Q3
16     2004Q1   2008Q4
17     2004Q2   2009Q1
18     2004Q3   2009Q2
19     2004Q4   2009Q3
20     2005Q1   2009Q4
21     2005Q2   2010Q1
22     2005Q3   2010Q2
23     2005Q4   2010Q3
24     2006Q1   2010Q4
25     2006Q2   2011Q1
26     2006Q3   2011Q2
27     2006Q4   2011Q3
28     2007Q1   2011Q4
29     2007Q2   2012Q1
30     2007Q3   2012Q2
31     2007Q4   2012Q3
32     2008Q1   2012Q4
33     2008Q2   2013Q1
34     2008Q3   2013Q2
35     2008Q4   2013Q3
36     2009Q1   2013Q4
37     2009Q2   2014Q1
38     2009Q3   2014Q2
39     2009Q4   2014Q3