熊猫数据范围内的日期偏移

时间:2021-05-06 15:39:47

标签: python pandas

我有以下公式,从 2 月 90 日开始,每 3M 给我一次 EOM 日期。

dates = pd.date_range(start="1990-02-01", end="2029-09-30", freq="3M")

我希望以简洁的方式获得同一张表,但其中的日期偏移了 x 个工作日。 这意味着,如果 x = 2,则从 2 月 90 日开始每 3M 计算 EOM 日期前 2 个工作日。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

from pandas.tseries.offsets import BDay

x = 2 
dates = pd.date_range(start="1990-02-01", end="2029-09-30", freq="3M") - BDay(x)
>>> dates
DatetimeIndex(['1990-02-26', '1990-05-29', '1990-08-29', '1990-11-28',
               '1991-02-26', '1991-05-29', '1991-08-29', '1991-11-28',
               '1992-02-27', '1992-05-28',
               ...
               '2027-05-27', '2027-08-27', '2027-11-26', '2028-02-25',
               '2028-05-29', '2028-08-29', '2028-11-28', '2029-02-26',
               '2029-05-29', '2029-08-29'],
              dtype='datetime64[ns]', length=159, freq=None)

示例

x = 2

dti1 = pd.date_range(start="1990-02-01", end="2029-09-30", freq="3M")
dti2 = pd.date_range(start="1990-02-01", end="2029-09-30", freq="3M") - BDay(x)

df = pd.DataFrame({"dti1": dti1.day_name(), "dti2": dti2.day_name()})
>>> df.head(20)
         dti1       dti2
0   Wednesday     Monday
1    Thursday    Tuesday
2      Friday  Wednesday
3      Friday  Wednesday
4    Thursday    Tuesday
5      Friday  Wednesday
6    Saturday   Thursday
7    Saturday   Thursday
8    Saturday   Thursday
9      Sunday   Thursday
10     Monday   Thursday
11     Monday   Thursday
12     Sunday   Thursday
13     Monday   Thursday
14    Tuesday     Friday
15    Tuesday     Friday
16     Monday   Thursday
17    Tuesday     Friday
18  Wednesday     Monday
19  Wednesday     Monday