如何用Pandas计算DataFrame两日期列间的工作日天数?
计算DataFrame中每行日期的工作日天数差
你可以使用**numpy的np.busday_count**实现向量化计算,不需要遍历DataFrame,这是处理批量日期工作日差的高效方法。
核心代码
假设你的DataFrame两列日期字段为date和date2,且已经是datetime格式,直接执行:
import numpy as np import pandas as pd df['Bus_days'] = np.busday_count( df['date'].values.astype('datetime64[D]'), df['date2'].values.astype('datetime64[D]') )
为什么你之前的方法失效?
[df['date'], df['date2']].asfreq(BDay()).count():列表没有asfreq方法,且asfreq是用于调整时间序列频率的,不适合计算日期差。pd.bdate_range(df['date'], df['date2']).count():pd.bdate_range仅接受单个日期作为起止参数,无法直接处理Series类型的批量日期。len(pd.date_range(start=df['date'],end=df['date2'],freq='B')):同上,date_range不支持Series作为起止输入,只能处理单个值。((df['date'] - df['date2'])).count():这个方法是统计非空值的数量,完全不是计算工作日差。
扩展:自定义节假日排除
如果需要排除特定节假日,可以给np.busday_count传入holidays参数:
# 定义节假日列表,格式为datetime64[D] custom_holidays = np.array(['2023-03-10', '2023-05-01'], dtype='datetime64[D]') df['Bus_days'] = np.busday_count( df['date'].values.astype('datetime64[D]'), df['date2'].values.astype('datetime64[D]'), holidays=custom_holidays )
内容的提问来源于stack exchange,提问作者IamaNOOB
相关产品推荐
相关产品推荐

