[英]Pandas how to create new date column with variable month column and find first business day of immediate following Quarter?
我有一個 dataframe 如下所示:
Date ID Month
01/12/2019 A 3
02/01/2019 B 2
03/15/2019 C 1
我想創建一個新列添加本月至今並找到下一個季度的第一個工作日:
Date ID Month New_Date Q_BGN_BDay
01/12/2019 A 3 4/12/2019 7/1/2019
02/01/2019 B 2 4/01/2019 4/1/2019
03/15/2019 C 12 3/15/2020 4/1/2020
01/01/2018 D 1 2/01/2018 4/2/2018
我試着用
from dateutil.relativedelta import relativedelta
New_Date = Date + relativedelta(months=3)
對於它工作的每個日期。 但是當它變成列表或df時。 它不工作。
df['New_Date'] = df['Date'] + relativedelta(months=df['Month'])
我可能可以使用 for 循環 function 進行迭代,但想知道是否有更好的方法來做到這一點。
讓我們試試
df['Date'] = pd.to_datetime(df.Date,dayfirst=False)
df['New'] = df['Date']+df.Month.apply(lambda x : pd.DateOffset(months=x))
df
Date ID Month New
0 2019-01-12 A 3 2019-04-12
1 2019-02-01 B 2 2019-04-01
2 2019-03-15 C 1 2019-04-15
第 1 步:a function 計算下個月的第一個工作日(第一個工作日僅考慮工作日與周末;不考慮節假日)
def Next_Q_BDay(date):
date =pd.to_datetime(date)
next_quarter = round((date.month - 1) / 3 + 1)+1
if next_quarter >=5:
next_quarter = 1
first_date = datetime(date.year, 3 * int(next_quarter) - 2, 1)
mid_date = datetime(date.year, 3 * int(next_quarter) - 2, 15)
next_q_bday = pd.date_range(first_date,mid_date, freq='BMS')[0]
return next_q_bday
第2步:
df['Q_BDAY'] = pd.to_datetime(df['New']).apply(Next_Q_BDay)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.