Подтвердить что ты не робот

Подсчет деловых дней между двумя сериями

Есть ли лучший способ, чем 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

Спасибо!

4b9b3361

Ответ 1

brian_the_bungler был самым эффективным способом сделать это, используя numpy busday_count:

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 раз быстрее на гораздо больших массивах дат