【问题标题】:Pandas how to create new date column with variable month column and find first business day of immediate following Quarter?Pandas 如何创建具有可变月份列的新日期列并找到紧接下一个季度的第一个工作日?
【发布时间】:2021-04-02 06:46:06
【问题描述】:

我有一个如下的数据框:

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 循环函数进行迭代,但想知道是否有更好的方法。

【问题讨论】:

    标签: python pandas datetime


    【解决方案1】:

    让我们试试

    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
    

    【讨论】:

    • 我可以再问一个问题吗?我们如何找到下一个日历季度的第一个工作日? (请参阅问题中的编辑表)谢谢!
    • 第一个工作日取决于地区、业务和节假日日历。例如,对于银行来说,4 月 1 日不是工作日,而对于其他企业来说是工作日。
    • @William.Wu 其他问题,请开新话题,谢谢
    • 谢谢大家。在 BENY 的帮助下,我自己想出了侧面部分(谢谢)。张贴在答案部分,以备不时之需。
    【解决方案2】:

    第 1 步:一个函数计算下个月的第一个工作日(第一个工作日只考虑工作日与周末;不考虑节假日)

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-12
      • 2021-05-07
      • 2020-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      相关资源
      最近更新 更多