Python datetimes之间在使用pandas的工作日数方面的差异
是否有一种(更)方便/高效的方法来使用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,包含日期时间。如果大熊猫有类似的东
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