Python Pandas BusinessHour偏移对象 – 移动到下一个工作日

Python Pandas BusinessHour偏移对象 – 移动到下一个工作日

在处理商业数据时,我们经常需要识别工作日并做出相应的业务决策。 在Python Pandas中,我们可以使用BusinessHour对象来处理工作日,例如,移动到下一个工作日。

更多Pandas相关文章,请阅读:Pandas 教程

BusinessHour偏移对象

Pandas中的BusinessHour对象表示一个工作日偏移对象,可以在不考虑非工作日(如周末和国定假日)的情况下,将时间向前或向后移动。

首先,让我们导入必要的Pandas库:

import pandas as pd
import numpy as np
from pandas.tseries.offsets import BusinessHour

然后,我们可以创建一个BusinessHour对象:

bh = BusinessHour()

现在我们假设今天是2022年10月21日,我们可以使用apply方法将BusinessHour对象应用于日期变量并输出结果:

today = pd.Timestamp('2022-10-21')
next_bday = bh.apply(today)
print(next_bday)

输出结果为:

2022-10-24 09:00:00

上面的结果显示,下一个工作日是10月24日,时分秒都被设置为“09:00:00”。

我们也可以在创建BusinessHour对象时设置一个start参数来指定每个工作日的开始时间:

bh = BusinessHour(start='10:30')

这将导致在下一步中,偏移结果为下一个工作日的10:30:

today = pd.Timestamp('2022-10-21 9:00')
next_bday = bh.apply(today)
print(next_bday)

输出结果为:

2022-10-24 10:30:00

这里的输出结果显示下一个工作日是10月24日,时间设置为“10:30:00”。

实现移动到下一个工作日

现在,我们来模拟一个业务场景:我们需要确定某个订单的发货时间。如果订单发货日期在周末或国定假日,则应将发货日期推迟到下一个工作日。

我们使用Pandas DataFrame类来表示订单信息。 DataFrame包含“订单日期”和“发货日期”两列。

orders = pd.DataFrame({
    'OrderDate': pd.date_range('2022-10-01', periods=5, freq='W'),
    'ShipDate': pd.date_range('2022-10-02', periods=5, freq='W')
})

我们可以看到,该DataFrame包含5个订单,每个订单都在周日下单,并在周一发货:

   OrderDate   ShipDate
0 2022-10-02 2022-10-03
1 2022-10-09 2022-10-10
2 2022-10-16 2022-10-17
3 2022-10-23 2022-10-24
4 2022-10-30 2022-10-31

我们现在实现一个函数,该函数接受订单日期作为输入,并计算下一个工作日的发货日期。 如果订单日期是工作日,则返回订单日期的下一个工作日。 如果订单日期是周末或国定假日,则返回下一个工作日。

def next_business_day(date):
    bh = BusinessHour(start='10:00')
    ship_date = bh.apply(date)

    if date.weekday() >= 5:
        ship_date = bh.offset(date, 1)

    return ship_date

我们可以使用apply方法并传递“OrderDate”列来计算每个订单的发货日期:

orders['ShipDate'] = orders['OrderDate'].apply(next_business_day)

我们现在再次查看订单DataFrame,可以看到所有订单的发货日期都被推迟到下一个工作日:

   OrderDate            ShipDate
0 2022-10-02 2022-10-03 10:00:00
1 2022-10-09 2022-10-11 10:00:00
2 2022-10-16 2022-10-17 10:00:00
3 2022-10-23 2022-10-24 10:00:00
4 2022-10-30 2022-10-31 10:00:00

现在,如果订单日期是周末或国定假日,我们的函数将会正确地将发货日期推迟到下一个工作日。

结论

Python Pandas中,我们可以使用BusinessHour对象处理工作日,可以将时间向前或向后移动。在处理商业数据时,使用BusinessHour对象可以处理复杂的业务场景,例如移动到下一个工作日。在以上示例中,我们演示了如何使用BusinessHour对象处理订单的发货日期,如果订单日期是周末或国定假日,则自动推迟到下一个工作日,以确保按时交货。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

Pandas 教程