簡體   English   中英

Pandas 如何使用可變月份列創建新日期列並找到緊接下一個季度的第一個工作日?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM