Подсчет рабочих дней между последующими строками в пандах - PullRequest
1 голос
/ 03 октября 2019

У меня есть большой массив данных pandas (более 1000000 строк), где мне нужно как можно быстрее получить количество рабочих дней (исключая выходные) между двумя строками (n и n + 1), где каждая содержит дату столбца. И каждый раз мне нужно сохранять длительность (результат) в строке n того же кадра данных в столбце с названием «длительность». Результат в секундах.

Я использую приведенный ниже код, чтобы выполнить вычисления самым быстрым из известных мне способов (приветствуется любой лучший способ ;-)).

    tmp_df['duration'] = 
    tmp_df['origin_tick_generation_time_stamp'].shift(-1) - tmp_df[
            'origin_tick_generation_time_stamp']

Iхотел бы рассчитать продолжительность без выходных в моем коде. Я читал, что np.busday_count (date1, date2) сделает именно это. Но не знаю, как использовать его в моем случае. Есть ли способ сделать это?

Большое спасибо

1 Ответ

1 голос
/ 03 октября 2019

Используйте pandas.Series.diff :

tmp_df['duration'] = tmp_df['origin_tick_generation_time_stamp'].diff(-1)*-1

или

tmp_df['duration'] = tmp_df['origin_tick_generation_time_stamp'].diff()*shift(-1)

это что-то быстрее.

Пример:

import numpy as np
df=pd.DataFrame()
df['a']=np.arange(1000000)
import time

start_time = time.time()
df['a'].shift(-1)-df['a']
elapsed_time = time.time() - start_time
print(elapsed_time)


#0.023838520050048828

start_time = time.time()
df['a'].diff(-1)*-1
elapsed_time = time.time() - start_time
print(elapsed_time)
#0.008615493774414062

start_time = time.time()
df['a'].diff().shift(-1)
elapsed_time = time.time() - start_time
print(elapsed_time)
#0.011868000030517578
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...