两个日期之间的Python每周数据帧



我有一个数据帧如下:

Code       First         End
0    A2M  31/03/2018  29/09/2020
1    AAN  31/03/2007  29/06/2007
2    AAP  31/12/1999  29/09/2000
3    ABB  30/06/2009  29/06/2009
4    ABC  31/12/2009  29/06/2019
5    ABS  31/03/2006  30/03/2008
6    ADP  31/12/1999  29/06/2003
7    AEO  31/03/2002  29/09/2002
8   AFG1  30/09/2006  30/12/2007
9    AGL  31/03/2007  29/06/2020
10  AGL1  31/12/1999  29/09/2006
11   AGO  31/03/2011  30/03/2013
12   AIO  31/12/2007  30/03/2016
13   ALD  31/12/1999  29/06/2020
14   ALL  30/09/2000  29/06/2020
15   ALQ  30/06/2011  29/06/2020
16   ALU  30/06/2019  29/06/2020
17   ALX  31/03/2016  29/06/2020
18   ALZ  30/06/2014  29/06/2014
19   AMC  31/12/1999  29/06/2020

我需要创建一个新的数据帧,列出每个代码的每一周。例如:

ticker  date
A2M 31/03/2018
A2M 7/04/2018
A2M 14/04/2018
A2M 21/04/2018
A2M 28/04/2018
A2M 5/05/2018
A2M 12/05/2018
A2M 19/05/2018
A2M 26/05/2018
A2M 2/06/2018

我试着在这里使用以前的答案:

import datetime
d1 = datetime.date(2016,12,01)
d2 = datetime.date(2017,01,31)
weekly = d1
while weekly <= d2:
print weekly
weekly = weekly + datetime.timedelta(days=7)

但我无法让它在多个Codes的数据帧中工作。

创建日期范围,然后使用explode

# pandas version: 1.1.4
df['date_rng'] = df.apply(lambda x: pd.date_range(x['First'], x['End'], freq='7D'), axis=1)
df_exploded = df.explode("date_rng")
result = df_exploded[['Code', 'date_rng']]
result.columns = ['ticker', 'date']

输出:

ticker  date
0   A2M 2018-03-31
0   A2M 2018-04-07
0   A2M 2018-04-14
0   A2M 2018-04-21
0   A2M 2018-04-28
... ... ...
19  AMC 2020-05-29
19  AMC 2020-06-05
19  AMC 2020-06-12
19  AMC 2020-06-19
19  AMC 2020-06-26
6560 rows × 2 columns

最新更新