以下代碼為給定的開始時間和結束時間提供了 90 分鐘的時間塊。如果我們看到第一行,則 90 分鐘的時間塊從 開始到11/07/2021 04:52結束11/07/2021 06:22。但是,它也可以從 開始11/07/2021 04:53和結束于11/07/2021 06:23。此外,從 開始11/07/2021 04:54并結束于11/07/2021 06:24。開始時間的最大值可以是結束時間和間隔的差值(即 end - interval)。這也意味著結束時間不能超過end下面代碼中存盤在 object中的值,下面的代碼確保了這一點。
那么,我們如何將開始時間增加 1 分鐘,直到達到最大值?
from datetime import datetime, timedelta
def datetime_range(start, end, delta):
current = start
while current < end:
yield current
current = delta
start = datetime(2021,7,11,4,52,0)
end = start pd.Timedelta(minutes=1198)
interval = timedelta(minutes=90)
ts = [dt.strftime('%d/%m/%Y %H:%M') for dt in datetime_range(start, end, interval)]
print(dts)
task = pd.DataFrame(columns=['ST','ET'])
def splitIntoBlocks(dts):
for i in range(len(dts)-1):
task.loc[i, ['ST']]=dts[i]
task.loc[i, ['ET']]=dts[i 1]
task['alpha'] = (pd.to_datetime(task['ST'], format="%d/%m/%Y %H:%M")-pd.to_datetime(start, format="%d/%m/%Y %H:%M"))/timedelta(minutes=1)
task['MID'] = 1
splitIntoBlocks(dts)
print(task.head(40))
輸出
['11/07/2021 04:52', '11/07/2021 06:22', '11/07/2021 07:52', '11/07/2021 09:22', '11/07/2021 10:52', '11/07/2021 12:22', '11/07/2021 13:52', '11/07/2021 15:22', '11/07/2021 16:52', '11/07/2021 18:22', '11/07/2021 19:52', '11/07/2021 21:22', '11/07/2021 22:52', '12/07/2021 00:22']
ST ET alpha MID
0 11/07/2021 04:52 11/07/2021 06:22 0.0 1
1 11/07/2021 06:22 11/07/2021 07:52 90.0 1
2 11/07/2021 07:52 11/07/2021 09:22 180.0 1
3 11/07/2021 09:22 11/07/2021 10:52 270.0 1
4 11/07/2021 10:52 11/07/2021 12:22 360.0 1
5 11/07/2021 12:22 11/07/2021 13:52 450.0 1
6 11/07/2021 13:52 11/07/2021 15:22 540.0 1
7 11/07/2021 15:22 11/07/2021 16:52 630.0 1
8 11/07/2021 16:52 11/07/2021 18:22 720.0 1
9 11/07/2021 18:22 11/07/2021 19:52 810.0 1
10 11/07/2021 19:52 11/07/2021 21:22 900.0 1
11 11/07/2021 21:22 11/07/2021 22:52 990.0 1
12 11/07/2021 22:52 12/07/2021 00:22 1080.0 1
uj5u.com熱心網友回復:
做你問的根本不需要你的dts陣列。
import pandas as pd
from datetime import datetime, timedelta
start = datetime(2021,7,11,4,52,0)
end = start pd.Timedelta(minutes=1198)
interval = timedelta(minutes=90)
task = pd.DataFrame(columns=['ST','ET'])
def splitIntoBlocks(now):
for i in range(1198):
task.loc[i, ['ST']]=now
task.loc[i, ['ET']]=now interval
task['alpha'] = (task['ST'] - start)/timedelta(minutes=1)
task['MID'] = 1
now = timedelta(minutes=1)
splitIntoBlocks(start)
print(task.head(40))
輸出:
ST ET alpha MID
0 2021-07-11 04:52:00 2021-07-11 06:22:00 0.0 1
1 2021-07-11 04:53:00 2021-07-11 06:23:00 1.0 1
2 2021-07-11 04:54:00 2021-07-11 06:24:00 2.0 1
3 2021-07-11 04:55:00 2021-07-11 06:25:00 3.0 1
4 2021-07-11 04:56:00 2021-07-11 06:26:00 4.0 1
5 2021-07-11 04:57:00 2021-07-11 06:27:00 5.0 1
6 2021-07-11 04:58:00 2021-07-11 06:28:00 6.0 1
7 2021-07-11 04:59:00 2021-07-11 06:29:00 7.0 1
8 2021-07-11 05:00:00 2021-07-11 06:30:00 8.0 1
9 2021-07-11 05:01:00 2021-07-11 06:31:00 9.0 1
10 2021-07-11 05:02:00 2021-07-11 06:32:00 10.0 1
11 2021-07-11 05:03:00 2021-07-11 06:33:00 11.0 1
12 2021-07-11 05:04:00 2021-07-11 06:34:00 12.0 1
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/369869.html
