Python 如何更改基于CustomBusinessHour的weekmask中的开始-结束时间等于星期一

Python 如何更改基于CustomBusinessHour的weekmask中的开始-结束时间等于星期一,python,pandas,numpy,Python,Pandas,Numpy,如果我从startdate和enddate获得weekmask列表中的星期一,我想更改CustomBusinessHour中的开始-结束时间。 开始=00:01结束=23:59 如果我得到星期一b/w startdate和enddate,我试图将开始时间改为07:00,结束时间=23:59 data = { 'start': ['2018-10-29 18:48:46.697000', '2018-10-29 19:01:10.887000',

如果我从startdate和enddate获得weekmask列表中的星期一,我想更改CustomBusinessHour中的开始-结束时间。 开始=00:01结束=23:59

如果我得到星期一b/w startdate和enddate,我试图将开始时间改为07:00,结束时间=23:59

data = { 
    'start': ['2018-10-29 18:48:46.697000',
              '2018-10-29 19:01:10.887000',
              '2018-10-22 17:42:24.467000'], 
    'end': ['2018-10-31 17:56:38.830000',
            '2018-11-27 09:31:39.967000',
            '2018-11-28 18:33:35.243000' ]   
}
df = pd.DataFrame(data)

bh = CustomBusinessHour(calendar=USFederalHolidayCalendar(),start='00:01', end='23:59')
df['Hours_diff'] = df.apply(lambda x: len(pd.date_range(start=x.start, end=x.end, freq= bh)),axis=1)

您可以使用带有函数的
apply
,为每一行提供开始和结束
datetime
。然后在
CustomBusinessHour
上使用掩码

import pandas as pd
from pandas.tseries.offsets import CustomBusinessHour
from pandas.tseries.holiday import USFederalHolidayCalendar

data = { 
    'start': ['2018-10-29 18:48:46.697000',
              '2018-10-29 19:01:10.887000',
              '2018-10-22 17:42:24.467000'], 
    'end': ['2018-10-31 17:56:38.830000',
            '2018-11-27 09:31:39.967000',
            '2018-11-28 18:33:35.243000' ]   
}
df = pd.DataFrame(data)

bh = CustomBusinessHour(calendar=USFederalHolidayCalendar(), start='00:01', end='23:59')

def f(x):
    idx = pd.date_range(start=x.start, end=x.end, freq= bh)
    mask = ~((idx.dayofweek == 0) & (idx.hour <= 7))

    return len(idx[mask])

df['Hours_diff'] = df.apply(f, axis=1)

确保这是正确的,我还没有检查。

Hi@Chris它在我的本地工作正常,但我在服务器上移动了它,它在下面给出了错误Attributeerror:(“Series对象没有属性‘开始’,‘在索引0处发生’)听起来好像你的数据不包含‘开始’?是的@Chris,我的列名不同。。。,对不起,这是我的错
                        start                         end  Hours_diff
0  2018-10-29 18:48:46.697000  2018-10-31 17:56:38.830000          42
1  2018-10-29 19:01:10.887000  2018-11-27 09:31:39.967000         391
2  2018-10-22 17:42:24.467000  2018-11-28 18:33:35.243000         527