计算后续熊猫数据框行之间的工作日

时间:2019-10-03 17:58:04

标签: python pandas numpy

我有大熊猫数据框(超过1000000行),在这里我需要以最快的方式获取两行(n和n + 1)之间的工作日(不包括周末)的工作日数,每行包含一个列日期。每次,我需要将持续时间(结果)存储在同一数据帧的第n行的称为“持续时间”的列中。结果以秒为单位。

我正在使用以下代码以我所知道的最快方式进行计算(欢迎使用更好的方法;-))。

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

我想在代码中计算不包含周末的持续时间。我读到np.busday_count(date1,date2)会做到这一点。但是不知道如何在我的情况下使用它。 有办法吗?

非常感谢

1 个答案:

答案 0 :(得分:1)

使用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