【发布时间】:2022-01-25 19:59:58
【问题描述】:
所以我有一个这样的数据框
df1 = {'id':[123,347],
'shift_start':['2022-01-25 09:00:00', '2022-01-28 19:00:00'],
'shift_end':['2022-01-25 12:30:00', '2022-01-29 00:00:00']}
df1 = pd.DataFrame(df1,columns=['id','shift_start', 'shift_end'])
id shift_start shift_end
123 2022-01-25 09:00:00 2022-01-28 12:30:00
347 2022-01-25 23:00:00 2022-01-29 00:00:00
我想为每个 id 获取每个班次中有多少个 30 分钟的时段,所以像这样
id shift_start shift_end slot_start slot_end
123 2022-01-25 09:00:00 2022-01-28 12:30:00 2022-01-25 09:00:00 2022-01-25 09:30:00
123 2022-01-25 09:00:00 2022-01-28 12:30:00 2022-01-25 09:30:00 2022-01-25 10:00:00
123 2022-01-25 09:00:00 2022-01-28 12:30:00 2022-01-25 10:00:00 2022-01-25 10:30:00
123 2022-01-25 09:00:00 2022-01-28 12:30:00 2022-01-25 10:30:00 2022-01-25 11:00:00
123 2022-01-25 09:00:00 2022-01-28 12:30:00 2022-01-25 11:00:00 2022-01-25 11:30:00
123 2022-01-25 09:00:00 2022-01-28 12:30:00 2022-01-25 11:30:00 2022-01-25 12:00:00
123 2022-01-25 09:00:00 2022-01-28 12:30:00 2022-01-25 12:00:00 2022-01-25 12:30:00
347 2022-01-25 23:00:00 2022-01-29 00:00:00 2022-01-25 23:00:00 2022-01-29 23:30:00
347 2022-01-25 23:00:00 2022-01-29 00:00:00 2022-01-25 23:30:00 2022-01-29 00:00:00
我找到了找到 30 分钟插槽的方法,但我仍然找不到将它们添加到数据帧中的方法
def datetime_range(start, end, delta):
current = start
while current < end:
yield current
current += delta
for index, row in df1.iterrows():
dts = [dt.strftime('%Y-%m-%d %H:%M:%S') for dt in
datetime_range(datetime(row['shift_start'].year, row['shift_start'].month, row['shift_start'].day, row['shift_start'].hour, row['shift_start'].minute),
datetime(row['shift_end'].year, row['shift_end'].month, row['shift_end'].day, row['shift_end'].hour, row['shift_end'].minute),
timedelta(minutes=30))]
print(dts)
非常欢迎任何帮助。谢谢!
【问题讨论】:
标签: python-3.x pandas date datetime