Python 计算两个系列之间的工作日

Python 计算两个系列之间的工作日,python,pandas,Python,Pandas,有没有比bdate_range()更好的方法通过pandas测量两列日期之间的工作日 df = pd.DataFrame({ 'A' : ['1/1/2013', '2/2/2013', '3/3/2013'], 'B': ['1/12/2013', '4/4/2013', '3/3/2013']}) print df df['A'] = pd.to_datetime(df['A']) df['B'] = pd.to_datetime(df['B']) f = lambda x: len(pd

有没有比bdate_range()更好的方法通过pandas测量两列日期之间的工作日

df = pd.DataFrame({ 'A' : ['1/1/2013', '2/2/2013', '3/3/2013'],
 'B': ['1/12/2013', '4/4/2013', '3/3/2013']})
print df
df['A'] = pd.to_datetime(df['A'])
df['B'] = pd.to_datetime(df['B'])
f = lambda x: len(pd.bdate_range(x['A'], x['B']))
df['DIFF'] = df.apply(f, axis=1)
print df
输出为:

          A          B
0  1/1/2013  1/12/2013
1  2/2/2013   4/4/2013
2  3/3/2013   3/3/2013
                    A                   B  DIFF
0 2013-01-01 00:00:00 2013-01-12 00:00:00     9
1 2013-02-02 00:00:00 2013-04-04 00:00:00    44
2 2013-03-03 00:00:00 2013-03-03 00:00:00     0

谢谢

brian_这个笨蛋利用numpy的busday计数找到了最有效的方法:

import numpy as np
A = [d.date() for d in df['A']]
B = [d.date() for d in df['B']]
df['DIFF'] = np.busday_count(A, B)
print df

在我的机器上,在您的测试用例上,这要快300倍,在更大的日期数组上要快1000倍

可能的重复:(查看底部以计算天数,而不是列出天数。)@DanAllan从创建中间日期范围的意义上说,这感觉也一样。。。但是,如果不这样做,这可能是不可能的:赛斯,当然。如果您正在研究长距离,并且只需要排除周末(而不是节假日),我希望构建一个自定义函数会更快,该函数使用a和B的一周天数及其总时间差来计算工作日数。在处理上述问题时,我调查了numpy busday_计数,但从元数据[us]到[D]的转换存在问题
f=lambda x:np.busday_计数(x['A'],x['B'])
。[Antonbass][1]的另一种更简洁的语法是:
df['DIFF']=np.busday_计数(df['A'].tolist(),df['B'].tolist())
或者
df['DIFF']=np.busday_计数(df.index.date.tolist(),df['B'].tolist())
如果将索引用作日期列,则为日期列。[1] :请注意,此解决方案与问题中的解决方案得出的结果不同。这里的结果将是[9,43,0],而不是[9,44,0]