首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向日期四分时回填和提前灌装大熊猫

向日期四分时回填和提前灌装大熊猫
EN

Stack Overflow用户
提问于 2022-10-23 14:56:36
回答 1查看 26关注 0票数 0

我试图根据到期日期填充季度到期日。我能够确定季度的到期日期,但类似于我如何做的每月到期。我希望季度日期回填和转发填补下一个季度到期。

我知道我可以使用熊猫以外的图书馆,但是在熊猫数据仓库里有办法做到这一点吗?

代码语言:javascript
复制
import pandas as pd
import pandas.tseries.offsets as offsets
import numpy as np
from datetime import date

expire = ['2022-10-24','2022-10-26','2022-10-28','2022-10-31','2022-11-02','2022-11-04','2022-11-07','2022-11-09','2022-11-11','2022-11-14',
'2022-11-16','2022-11-18','2022-11-21','2022-11-23','2022-11-25','2022-12-02','2022-12-16','2022-12-30','2023-01-20','2023-02-17','2023-03-17',
'2023-03-31','2023-06-16','2023-06-30','2023-09-15','2023-09-29','2023-12-15','2024-01-19','2024-06-21','2024-12-20','2025-01-17']

quarterlies = ['2022-12-30','2023-03-31','2023-06-30','2023-09-29','2023-12-29','2024-03-28','2024-06-28','2024-09-30','2024-12-31','2025-03-31',
'2025-06-30','2025-09-30','2025-12-31']

date_df = pd.DataFrame(expire)
date_df.columns = ["expiration_date"]
date_df = date_df.set_index(date_df["expiration_date"])
date_df["expiration_date"] = pd.to_datetime(date_df["expiration_date"], format="%Y-%m-%d")
date_df.index.name = "expiration_date_idx"

all_third_fridays = pd.DataFrame(pd.date_range(date_df["expiration_date"].min(),
                      date_df["expiration_date"].max()+pd.tseries.offsets.Day(30),
                      freq="WOM-3FRI"),
                      columns=["monthly_exp"])
              
date_df = pd.merge_asof(date_df, all_third_fridays, left_on="expiration_date", right_on="monthly_exp", direction="forward")

df_quarterly = pd.DataFrame(quarterlies)
df_quarterly.columns = ['quarterly_expire']
date_df['quarterly_expire'] = date_df['expiration_date'].isin(df_quarterly['quarterly_expire'])
date_df['quarterly_exp'] = date_df['expiration_date'] + offsets.QuarterEnd() - offsets.Week(weekday=4) #not accurate, so I had to use list
date_df.loc[(date_df['quarterly_expire'] == True), 'quarterly_expiration'] = date_df['expiration_date']
#date_df["quarterly_expiration"].bfill(axis =df_quarterly['quarterly_expiration']) series error

print(date_df)

该填充将适用于所有的选项,除了那些突出显示在底部,他们需要转发填充到下一个四分卫日期。

但是,我得到了下面的错误,并且我很难理解为什么?这仍然不能解决黄色高光显示的全部问题。

代码语言:javascript
复制
ValueError: No axis named quarterly_expiration for object type Series

这是我得到的输出:

代码语言:javascript
复制
   expiration_date monthly_exp  quarterly_expire quarterly_exp quarterly_expiration
0       2022-10-24  2022-11-18             False    2022-12-30                  NaT
1       2022-10-26  2022-11-18             False    2022-12-30                  NaT
2       2022-10-28  2022-11-18             False    2022-12-30                  NaT
3       2022-10-31  2022-11-18             False    2022-12-30                  NaT
4       2022-11-02  2022-11-18             False    2022-12-30                  NaT
5       2022-11-04  2022-11-18             False    2022-12-30                  NaT
6       2022-11-07  2022-11-18             False    2022-12-30                  NaT
7       2022-11-09  2022-11-18             False    2022-12-30                  NaT
8       2022-11-11  2022-11-18             False    2022-12-30                  NaT
9       2022-11-14  2022-11-18             False    2022-12-30                  NaT
10      2022-11-16  2022-11-18             False    2022-12-30                  NaT
11      2022-11-18  2022-11-18             False    2022-12-30                  NaT
12      2022-11-21  2022-12-16             False    2022-12-30                  NaT
13      2022-11-23  2022-12-16             False    2022-12-30                  NaT
14      2022-11-25  2022-12-16             False    2022-12-30                  NaT
16      2022-12-16  2022-12-16             False    2022-12-30                  NaT
17      2022-12-30  2023-01-20              True    2022-12-30           2022-12-30
18      2023-01-20  2023-01-20             False    2023-03-24                  NaT
19      2023-02-17  2023-02-17             False    2023-03-24                  NaT
20      2023-03-17  2023-03-17             False    2023-03-24                  NaT
21      2023-03-31  2023-04-21              True    2023-06-23           2023-03-31
22      2023-06-16  2023-06-16             False    2023-06-23                  NaT
23      2023-06-30  2023-07-21              True    2023-09-29           2023-06-30
24      2023-09-15  2023-09-15             False    2023-09-29                  NaT
25      2023-09-29  2023-10-20              True    2023-09-29           2023-09-29
26      2023-12-15  2023-12-15             False    2023-12-29                  NaT
27      2024-01-19  2024-01-19             False    2024-03-29                  NaT
28      2024-06-21  2024-06-21             False    2024-06-28                  NaT
29      2024-12-20  2024-12-20             False    2024-12-27                  NaT
30      2025-01-17  2025-01-17             False    2025-03-28                  NaT

这是我拍摄的输出:

也许有更好的方法来处理这个我没有想到的问题。我愿意接受建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-23 15:26:28

BQuarterEnd偏移量应该可以满足您的需要。

代码语言:javascript
复制
date_df.assign(quarterly_expiration=lambda x: x['expiration_date'] + pd.tseries.offsets.BQuarterEnd())
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74172141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档