工作和休息时间计算的日期时间解释



我从csv中提取数据,并在用python准备数据后转换为以下格式。我想进一步准备如下,将其作为表存储在DB中。

如果我们看到下表,从0分钟到52分钟的第8个小时的工作时间(状态:1(从第8小时53分钟到59分钟休息(零食休息((状态:2(

如何转换。

Existing
+------+-------+------------+------+------+------+----------+--------+--------+-------+-----+
|      | plant |    date    | shop | line | hour | startmin | endmin | status | shift | uph |
+------+-------+------------+------+------+------+----------+--------+--------+-------+-----+
|    8 | HEF1  | 03-01-2020 | E    |    1 |    8 |        0 |     52 |      1 |     2 |  25 |
|    9 | HEF1  | 03-01-2020 | E    |    1 |    8 |       53 |     59 |      2 |     2 |  25 |
|   10 | HEF1  | 03-01-2020 | E    |    1 |    9 |        0 |     59 |      1 |     2 |  25 |
|   11 | HEF1  | 03-01-2020 | E    |    1 |   10 |        0 |     59 |      1 |     2 |  25 |
| 9645 | HEF2  | 27-01-2020 | E    |    1 |    7 |        0 |     59 |      1 |     1 |  58 |
| 9646 | HEF2  | 27-01-2020 | E    |    1 |    8 |        0 |     52 |      1 |     1 |  58 |
| 9647 | HEF2  | 27-01-2020 | E    |    1 |    8 |       53 |     59 |      2 |     1 |  58 |
+------+-------+------------+------+------+------+----------+--------+--------+-------+-----+

我想将其转换为以下

Required
+-------+---------------------+------+------+------+--------+-------+-----+
| plant |      datetime       | shop | line | hour | status | shift | uph |
+-------+---------------------+------+------+------+--------+-------+-----+
| HEF1  | 03-01-2020 08:00:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:01:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:02:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:03:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:04:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:05:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:06:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:07:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:08:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:09:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:10:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:11:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:12:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:13:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:14:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:15:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:16:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:17:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:18:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:19:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:20:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:21:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:22:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:23:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:24:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:25:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:26:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:27:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:28:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:29:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:30:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:31:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:32:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:33:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:34:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:35:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:36:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:37:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:38:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:39:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:40:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:41:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:42:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:43:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:44:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:45:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:46:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:47:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:48:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:49:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:50:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:51:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:52:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 08:53:00 | E    |    1 |    8 |      2 |     2 |  25 |
| HEF1  | 03-01-2020 08:54:00 | E    |    1 |    8 |      2 |     2 |  25 |
| HEF1  | 03-01-2020 08:55:00 | E    |    1 |    8 |      2 |     2 |  25 |
| HEF1  | 03-01-2020 08:56:00 | E    |    1 |    8 |      2 |     2 |  25 |
| HEF1  | 03-01-2020 08:57:00 | E    |    1 |    8 |      2 |     2 |  25 |
| HEF1  | 03-01-2020 08:58:00 | E    |    1 |    8 |      2 |     2 |  25 |
| HEF1  | 03-01-2020 08:59:00 | E    |    1 |    8 |      2 |     2 |  25 |
| HEF1  | 03-01-2020 09:00:00 | E    |    1 |    8 |      1 |     2 |  25 |
| HEF1  | 03-01-2020 09:01:00 | E    |    1 |    8 |      1 |     2 |  25 |
+-------+---------------------+------+------+------+--------+-------+-----+

首先创建开始和结束时间戳:

df['start_ts'] = pd.to_datetime(df['date'].astype(str) +' '+ df['hour'].astype(str)+':'+df['startmin'].astype(str))
df['end_ts'] = pd.to_datetime(df['date'].astype(str) +' '+ df['hour'].astype(str)+':'+df['endmin'].astype(str))

然后创建一个日期范围列:

df['t_range'] = [pd.date_range(start=x[0], end=x[1], freq='min') for x in zip(df['start_ts'], df['end_ts'])]

然后在那列爆炸:

df.explode('t_range')

根据需要删除和重命名列

最新更新