裁剪时间

Cropping the time

我有一个 python 列表,格式如下。

time_list = ['2021-02-04 02:40:00', '2021-02-04 02:41:00', '2021-02-04 02:42:00', '2021-02-04 02:44:00', '2021-02-04 03:01:00', '2021-02-04 03:02:00', '2021-02-04 03:03:00', '2021-02-04 03:04:00', '2021-02-04 03:05:00']

我需要时间像

answer_list = [{'start': '2021-02-04 02:40:00', 'end': '2021-02-04 02:44:00'}, {'start': '2021-02-04 03:01:00', 'end': '2021-02-04 03:05:00'}]

我尝试了多种方法,没有一种看起来是正确的。谁能告诉我该怎么做,或者有什么模块可以裁剪吗?

在我看来,您想要按 小时 列出开始和结束时间。如果我对此是正确的,那么“作物”不是正确的术语,而是你的意思是“组”。 (但如果我错了请纠正我。)

这是一个算法,不是很花哨,但应该可以做到:

from dateutil import parser as dp

time_list = ['2021-02-04 02:40:00', '2021-02-04 02:41:00', '2021-02-04 02:42:00', '2021-02-04 02:44:00', '2021-02-04 03:01:00', '2021-02-04 03:02:00', '2021-02-04 03:03:00', '2021-02-04 03:04:00', '2021-02-04 03:05:00']

answer_list = []
start = None
for dtm in time_list:
    d = dp.parse(dtm)
    if start is None:
        start = d
        hour  = d.hour
    elif hour == d.hour:
        end   = d
        continue
    else:
        answer_list.append(dict(start=str(start),end=str(end)))
        start = d
        hour  = d.hour
answer_list.append(dict(start=str(start),end=str(end)))

print(answer_list)

输出:

[{'start': '2021-02-04 02:40:00', 'end': '2021-02-04 02:44:00'}, {'start': '2021-02-04 03:01:00', 'end': '2021-02-04 03:05:00'}]

您还可以使用 pandas 来更轻松地分组和操作此数据:

import pandas as pd
time_list = ['2021-02-04 02:40:00', '2021-02-04 02:41:00', '2021-02-04 02:42:00', '2021-02-04 02:44:00', '2021-02-04 03:01:00', '2021-02-04 03:02:00', '2021-02-04 03:03:00', '2021-02-04 03:04:00', '2021-02-04 03:05:00']

df = pd.DataFrame(dict(datetime=time_list),index=pd.DatetimeIndex(time_list))
df['Hour'] = [d.hour for d in df.index]

print(df)
                                datetime  Hour
2021-02-04 02:40:00  2021-02-04 02:40:00     2
2021-02-04 02:41:00  2021-02-04 02:41:00     2
2021-02-04 02:42:00  2021-02-04 02:42:00     2
2021-02-04 02:44:00  2021-02-04 02:44:00     2
2021-02-04 03:01:00  2021-02-04 03:01:00     3
2021-02-04 03:02:00  2021-02-04 03:02:00     3
2021-02-04 03:03:00  2021-02-04 03:03:00     3
2021-02-04 03:04:00  2021-02-04 03:04:00     3
2021-02-04 03:05:00  2021-02-04 03:05:00     3

现在您可以这样做:

print(df.groupby('Hour').first())
                 datetime

Hour
2     2021-02-04 02:40:00
3     2021-02-04 03:01:00

print(df.groupby('Hour').last())

                 datetime
Hour
2     2021-02-04 02:44:00
3     2021-02-04 03:05:00

还有...

answer_list = []
gbh = df.groupby('Hour')
for start,end in zip(gbh.first().values,gbh.last().values):
    answer_list.append(dict(start=start[0],end=end[0]))

print(answer_list)

[{'start': '2021-02-04 02:40:00', 'end': '2021-02-04 02:44:00'}, {'start': '2021-02-04 03:01:00', 'end': '2021-02-04 03:05:00'}]