Python 如何更改基于CustomBusinessHour的weekmask中的开始-结束时间等于星期一
如果我从startdate和enddate获得weekmask列表中的星期一,我想更改CustomBusinessHour中的开始-结束时间。 开始=00:01结束=23:59 如果我得到星期一b/w startdate和enddate,我试图将开始时间改为07:00,结束时间=23:59Python 如何更改基于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',
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