【发布时间】:2021-12-22 00:17:13
【问题描述】:
我有一个表示(多个)小时间隔的数据框:
import pandas as pd
df = pd.DataFrame(
{
'reserved': [
pd.Interval(pd.Timestamp(2011,11,9,8), pd.Timestamp(2011,11,9,12), closed='left'),
pd.Interval(pd.Timestamp(2011,11,9,13), pd.Timestamp(2011,11,9,21), closed='left')
],
'value': [1, 2]
})
| | reserved | value |
|---:|:-------------------------------------------|--------:|
| 0 | [2011-11-09 08:00:00, 2011-11-09 12:00:00) | 1 |
| 1 | [2011-11-09 13:00:00, 2011-11-09 21:00:00) | 2 |
我必须找出从 07:00 到 23:00 没有保留的时间。 像这样的:
working_hours = pd.date_range('2021-11-09 07', '2021-11-09 23', freq='1H')
DatetimeIndex(['2021-11-09 07:00:00', '2021-11-09 08:00:00',
'2021-11-09 09:00:00', '2021-11-09 10:00:00',
'2021-11-09 11:00:00', '2021-11-09 12:00:00',
'2021-11-09 13:00:00', '2021-11-09 14:00:00',
'2021-11-09 15:00:00', '2021-11-09 16:00:00',
'2021-11-09 17:00:00', '2021-11-09 18:00:00',
'2021-11-09 19:00:00', '2021-11-09 20:00:00',
'2021-11-09 21:00:00', '2021-11-09 22:00:00',
'2021-11-09 23:00:00'],
dtype='datetime64[ns]', freq='H')
哪个 working_hours 不是 df.reserved 间隔的一部分?
在上面的例子中,我们可以看到2021-11-09 07:00:00没有保留,2021-11-09 12:00:00没有保留,还有小时2011-11-09 21:00:00 - 2011-11-09 22:00:00。
我希望我能做这样的事情:
pd.Timestamp(2021,11,9,8) in df.reserved
但这总是返回False。
我需要的是:working_hours not in df.reserved 以获得:
2021-11-09 07:00:00
2021-11-09 12:00:00
2011-11-09 21:00:00
2011-11-09 22:00:00
怎么做?
【问题讨论】:
-
有一个包可以帮助你处理间隔,查看piso.readthedocs.io/en/latest/user_guide/case_studies/…
-
是的,我觉得 piso 包非常适合像这样的间隔操作
-
熊猫也应该可以胜任这项任务。
标签: python pandas time-series intervals between