Python datetimes之间在使用pandas的工作日数方面的差异

Python datetimes之间在使用pandas的工作日数方面的差异,python,pandas,timedelta,Python,Pandas,Timedelta,是否有一种(更)方便/高效的方法来使用pandas计算从日期到日期之间的工作日数 我可以 len(pd.bdate_范围(start='2018-12-03',end='2018-12-14'))-1#仅当结束日期为工作日时减去一 但对于从开始到结束之间的较长距离而言,这似乎相当低效 对于如何使用BDayoffset对象,有一些建议,但它们似乎都是指创建日期范围或类似的内容 我更多地考虑的是在工作日中表示的Timedelta对象 假设我有两个系列,s1和s2,包含日期时间。如果大熊猫有类似的东

是否有一种(更)方便/高效的方法来使用pandas计算从日期到日期之间的工作日数

我可以

len(pd.bdate_范围(start='2018-12-03',end='2018-12-14'))-1#仅当结束日期为工作日时减去一
但对于从开始到结束之间的较长距离而言,这似乎相当低效

对于如何使用
BDay
offset对象,有一些建议,但它们似乎都是指创建日期范围或类似的内容

我更多地考虑的是在工作日中表示的Timedelta对象

假设我有两个系列,
s1
s2
,包含日期时间。如果大熊猫有类似的东西

s1.dt.subtract(s2,freq='B')
#给出一个新的序列,其中包含计算天数的时间增量
#仅使用工作日
那太好了

(numpy有一个
busday\u count()
方法。但我不想将我的pandas时间戳转换为numpy,因为这可能会变得混乱。)

source我认为这里是个好主意,也不需要转换为numpy数组:

s1 = pd.Series(pd.date_range(start='05/01/2019',end='05/10/2019'))
s2 = pd.Series(pd.date_range(start='05/04/2019',periods=10, freq='5d'))

s = pd.Series([np.busday_count(a, b) for a, b in zip(s1, s2)])
print (s)
0     3
1     5
2     7
3    10
4    14
5    17
6    19
7    23
8    25
9    27
dtype: int64

在更广泛的日期范围内测试了这一点,以确保不会发生从熊猫到小熊的奇怪的时间戳转换,这可能会把事情搞砸。很好用,谢谢。
#create dataframes with the dates
df=pd.DataFrame({'dates':pd.date_range(start='05/01/2019',end='05/31/2019')})
#check if the dates are in business days
df[df['dates'].isin(pd.bdate_range(df['dates'].get(0), df['dates'].get(len(df)-1)))]

out[]:
0   2019-05-01
1   2019-05-02
2   2019-05-03
5   2019-05-06
6   2019-05-07
7   2019-05-08
8   2019-05-09
9   2019-05-10
12  2019-05-13
13  2019-05-14
14  2019-05-15
15  2019-05-16
16  2019-05-17
19  2019-05-20
20  2019-05-21
21  2019-05-22
22  2019-05-23
23  2019-05-24
26  2019-05-27
27  2019-05-28
28  2019-05-29
29  2019-05-30
30  2019-05-31
s1 = pd.Series(pd.date_range(start='05/01/2019',end='05/10/2019'))
s2 = pd.Series(pd.date_range(start='05/04/2019',periods=10, freq='5d'))

s = pd.Series([np.busday_count(a, b) for a, b in zip(s1, s2)])
print (s)
0     3
1     5
2     7
3    10
4    14
5    17
6    19
7    23
8    25
9    27
dtype: int64