Python Pandas – 返回应用于BusinessDay便宜的增量计数
什么是BusinessDay?
BusinessDay是pandas库中的一个日期偏移量(Date Offsets)。它表示一组在工作日之间偏移的日期。具体来说,BusinessDay的实例表示一组在常规工作日(即周一至周五)之间偏移的日期。这与Week和Month类似,他们也是偏移量类。
使用BusinessDay时,可以指定偏移量并定义一个开始日期。例如以下代码段:
import pandas as pd
from pandas.tseries.offsets import BusinessDay
# 指定一个从2019-01-01开始的Business Day偏移量
business_day = BusinessDay(start='2019-01-01')
# 输出下一个在工作日之间偏移的日期
print(pd.to_datetime('2019-12-25') + business_day)
输出的结果是:
Timestamp('2019-12-26 00:00:00')
这是因为2019-12-25是一个非工作日,而下一个在工作日之间偏移的日期是2019-12-26。
应用于BusinessDay偏移量的增量计数
当我们需要对一段时间进行计数时,常用的方式是直接统计每个时间点的个数。但是,在某些情况下,我们需要按工作日进行计数,例如统计一段时间内每个工作日的销售额。这时候就需要使用BusinessDay偏移量的增量计数。
在pandas中,可以使用“pd.date_range”创建一段日期范围,并使用BusinessDay作为“freq”数组参数的值。例如:
import pandas as pd
from pandas.tseries.offsets import BusinessDay
# 指定一个从2019-01-01开始的Business Day偏移量
business_day = BusinessDay(start='2019-01-01')
# 创建一个日期范围
date_range = pd.date_range(start='2019-01-01', end='2019-01-10', freq=business_day)
# 输出日期范围
print(date_range)
输出的结果是:
DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',
'2019-01-07', '2019-01-08', '2019-01-09', '2019-01-10'],
dtype='datetime64[ns]', freq='B')
可以看到,输出的日期范围是从2019-01-01开始的8个BusinessDay。
由此可见,输出的日期范围已经考虑了工作日的影响,这意味着我们可以直接使用日期范围的长度来进行工作日的计数。例如:
import pandas as pd
from pandas.tseries.offsets import BusinessDay
# 指定一个从2019-01-01开始的Business Day偏移量
business_day = BusinessDay(start='2019-01-01')
# 创建一个日期范围
date_range = pd.date_range(start='2019-01-01', end='2019-01-10', freq=business_day)
# 输出日期范围长度,即工作日的数量
print(len(date_range))
输出的结果是:
8
这是因为从2019-01-01到2019-01-10一共有8个工作日。
结论
在对时间段进行计数时,我们有时需要考虑工作日的影响。在pandas中,可以使用BusinessDay偏移量加以考虑。使用pd.date_range创建一个工作日范围,可以用其长度来获取工作日的数量。