首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫CustomBusinessHour降低性能

熊猫CustomBusinessHour降低性能
EN

Stack Overflow用户
提问于 2022-09-20 15:42:55
回答 1查看 30关注 0票数 -1

我需要降低以下操作的性能:

代码语言:javascript
复制
st = time.time()
bh = CustomBusinessHour(start='00:00', end='23:00')
bdates = pd.date_range(start='2024-01-01 00:00:00', end='2024-12-31 23:00:00', freq=bh, name='ts', closed=None)
print_statistics(f'{bdates}', 'filter_bp()', 'utils.py', time.time() - st)

它提供的输出如下:

代码语言:javascript
复制
DatetimeIndex(['2024-01-01 00:00:00', '2024-01-01 01:00:00',
               '2024-01-01 02:00:00', '2024-01-01 03:00:00',
               '2024-01-01 04:00:00', '2024-01-01 05:00:00',
               '2024-01-01 06:00:00', '2024-01-01 07:00:00',
               '2024-01-01 08:00:00', '2024-01-01 09:00:00',
               ...
               '2024-12-31 13:00:00', '2024-12-31 14:00:00',
               '2024-12-31 15:00:00', '2024-12-31 16:00:00',
               '2024-12-31 17:00:00', '2024-12-31 18:00:00',
               '2024-12-31 19:00:00', '2024-12-31 20:00:00',
               '2024-12-31 21:00:00', '2024-12-31 22:00:00'],
              dtype='datetime64[ns]', name='ts', length=6026, freq='CBH')                                

Execution time: 0.40148735046386718750 s

如果我尝试了一个没有CustomBusinessHour的类似操作,那么我的执行时间要好得多:

代码语言:javascript
复制
st = time.time()
test1 = pd.date_range(start='2024-01-01 00:00:00', end='2024-12-31 23:00:00', freq='H', name='ts', closed=None)
print_statistics(f'{test1}', 'filter_bp()', 'utils.py', time.time() - st)

它提供的输出如下:

代码语言:javascript
复制
DatetimeIndex(['2024-01-01 00:00:00', '2024-01-01 01:00:00',
               '2024-01-01 02:00:00', '2024-01-01 03:00:00',
               '2024-01-01 04:00:00', '2024-01-01 05:00:00',
               '2024-01-01 06:00:00', '2024-01-01 07:00:00',
               '2024-01-01 08:00:00', '2024-01-01 09:00:00',
               ...
               '2024-12-31 14:00:00', '2024-12-31 15:00:00',
               '2024-12-31 16:00:00', '2024-12-31 17:00:00',
               '2024-12-31 18:00:00', '2024-12-31 19:00:00',
               '2024-12-31 20:00:00', '2024-12-31 21:00:00',
               '2024-12-31 22:00:00', '2024-12-31 23:00:00'],
              dtype='datetime64[ns]', name='ts', length=8784, freq='H')  

Execution time: 0.00157237052917480469 s

所以执行时间要快400倍,只需删除那些记录。

有人知道怎么做吗?非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-21 14:54:38

解决方案是代码的以下部分:

代码语言:javascript
复制
st = time.time()
test1 = pd.date_range(start='2024-01-01 00:00:00', end='2024-12-31 23:00:00', freq='H', name='ts', closed=None)
test2 = pd.DatetimeIndex(list(filter(lambda x: (np.is_busday(np.datetime64(x, 'D'))) and (x.hour != 23), test1)))
print_statistics(f'{test2}', 'filter_bp()', 'utils.py', time.time() - st)

它提供了以下输出:

代码语言:javascript
复制
DatetimeIndex(['2024-01-01 00:00:00', '2024-01-01 01:00:00',
               '2024-01-01 02:00:00', '2024-01-01 03:00:00',
               '2024-01-01 04:00:00', '2024-01-01 05:00:00',
               '2024-01-01 06:00:00', '2024-01-01 07:00:00',
               '2024-01-01 08:00:00', '2024-01-01 09:00:00',
               ...
               '2024-12-31 13:00:00', '2024-12-31 14:00:00',
               '2024-12-31 15:00:00', '2024-12-31 16:00:00',
               '2024-12-31 17:00:00', '2024-12-31 18:00:00',
               '2024-12-31 19:00:00', '2024-12-31 20:00:00',
               '2024-12-31 21:00:00', '2024-12-31 22:00:00'],
              dtype='datetime64[ns]', length=6026, freq=None)                                Execution time: 0.13873147964477539062 s
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73789375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档