【问题标题】:Calculation of days until next and since last holiday based on date in Data Frame in Python Pandas?根据 Python Pandas 数据框中的日期计算到下一个假期和自上一个假期以来的天数?
【发布时间】:2021-05-28 16:44:54
【问题描述】:

我有如下数据框:

import pandas as pd
df = pd.DataFrame()
df["date"] = pd.date_range("2015", periods=5)

假期列表如下:holidays = ["30.12.2014", "02.01.2015", "10.10.2015"]

我想从“假期”列表中计算 df 中的每个日期,距下一个假期和自上一个假期以来的天数。 所以我需要如下结果(当然,如果我正确计算了天数,但如下所示):

【问题讨论】:

    标签: python pandas dataframe days


    【解决方案1】:

    在此处使用merge_asof,默认direction='backward'direction='forward' 用于添加列,然后通过将Series.dt.daysDataFrame.pop 转换为天数减去用于使用和删除列:

    df = pd.DataFrame()
    df["date"] = pd.date_range("2015", periods=5)
    
    holidays = ["30.12.2014", "02.01.2015", "10.01.2015"]
    holidays = pd.to_datetime(holidays, dayfirst=True)
    
    df1 = pd.DataFrame({'date1':holidays})
    
    df = pd.merge_asof(df, df1, left_on='date', right_on='date1', direction='forward')
    df = pd.merge_asof(df, df1, left_on='date', right_on='date1')
    
    df['until'] = df.pop('date1_x').sub(df['date']).dt.days
    df['since'] = df['date'].sub(df.pop('date1_y')).dt.days
    print (df)
            date  until  since
    0 2015-01-01      1      2
    1 2015-01-02      0      0
    2 2015-01-03      7      1
    3 2015-01-04      6      2
    4 2015-01-05      5      3
    

    【讨论】:

    • 也许您知道如何再添加 2 列 1 与下一个假期和 1 与上一个假期?
    • @bruno845 - 嗯,也许是最好的新问题,不是那么容易。
    猜你喜欢
    • 1970-01-01
    • 2015-04-25
    • 2020-08-21
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 2022-01-19
    相关资源
    最近更新 更多