如何将从日期提取的小时转换为小时+(以小时为单位的日期)?

时间:2018-05-31 14:19:16

标签: python pandas date time

       0   1
0      6   7
1     11  13
2      7   8
3     16  17
4      5   6
5     18  20
6      8   9
7     13  13
8      3   4
9     13  14
10     5   6
11    17  17
12    11  12
13    21  22
14    19  20
15     6   7
16    13  14
17    12  13
18     3   4
19     3   4
20    11  13
21    12  13
22     4   5
23     5   6
24    13  14
25    13  14
26     1   3
27     6   6
28     4   5
29    12  14
  ..  ..
9689  10  11
9690  16  17
9691  13  13
9692   8   8
9693   8   9
9694  12  13
9695  13  13
9696  19  19
9697  14  14
9698  13  13
9699  14  14
9700  19  19
9701  13  13
9702  19  19
9703  14  14
9704  13  13
9705   8   9
9706   7   8
9707   7   8
9708  17  18
9709  22  22
9710  12  12
9711   7   8
9712  20  22
9713  11  12
9714  16  17
9715   7   7
9716  24   2
9717   8  10
9718   8  10

我有这个数据帧,其中列对应于24小时时钟(1到24)的一小时。这些目前使用以下日期从日期中提取:

time = datetime.datetime.strptime(POXTime, '%d/%m/%Y %H:%M')
POXHour = time.hour

我想知道是否有人可以告诉我一种方法,我可以为后面一天的每个条目添加24(基于列表中显示的第一个日期为1到24小时)。例如,这个数据帧的前1000行是从01/05/2018开始,然后它继续到02/05/2018,但仍然在第17小时说“17”,我希望它说“41”(17 +24)......等等每个后续日子。希望这是有道理的!有人可以帮忙吗?

修改

以下是数据的前几行,而没有仅在一小时内删除日期/时间:

   POETime           POXTime
0     01/05/2018 05:33  01/05/2018 06:31
1     01/05/2018 10:56  01/05/2018 12:18
2     01/05/2018 06:22  01/05/2018 07:21
3     01/05/2018 15:17  01/05/2018 16:40
4     01/05/2018 04:19  01/05/2018 05:16
5     01/05/2018 17:41  01/05/2018 19:02
6     01/05/2018 07:56  01/05/2018 08:51

EDIT2 以下是日期更改的示例...

1360    01/05/2018 02:18    01/05/2018 02:18
1361    01/05/2018 21:47    01/05/2018 21:47
1362    01/05/2018 11:50    01/05/2018 11:50
1363    01/05/2018 07:28    01/05/2018 07:52
1364    01/05/2018 00:09    01/05/2018 00:09
1365    01/05/2018 15:52    01/05/2018 17:36
1366    01/05/2018 08:27    01/05/2018 09:32
1367    01/05/2018 04:57    01/05/2018 06:06
1368    01/05/2018 09:58    01/05/2018 11:44
1369    01/05/2018 16:32    01/05/2018 17:22
0   02/05/2018 02:17    02/05/2018 03:24
1   02/05/2018 12:08    02/05/2018 13:28
2   02/05/2018 06:31    02/05/2018 07:39
3   02/05/2018 15:20    02/05/2018 16:57
4   02/05/2018 04:06    02/05/2018 05:13
5   02/05/2018 17:18    02/05/2018 18:53
6   02/05/2018 08:32    02/05/2018 09:24
7   02/05/2018 02:36    02/05/2018 03:30
8   02/05/2018 03:40    02/05/2018 04:30

我要输出为...

1360    01/05/2018 02:18    01/05/2018 02:18        3   3
1361    01/05/2018 21:47    01/05/2018 21:47        10  10
1362    01/05/2018 11:50    01/05/2018 11:50        12  12
1363    01/05/2018 07:28    01/05/2018 07:52        8   8
1364    01/05/2018 00:09    01/05/2018 00:09        1   1
1365    01/05/2018 15:52    01/05/2018 17:36        16  18
1366    01/05/2018 08:27    01/05/2018 09:32        9   10
1367    01/05/2018 04:57    01/05/2018 06:06        5   7
1368    01/05/2018 09:58    01/05/2018 11:44        10  12
1369    01/05/2018 16:32    01/05/2018 17:22        17  18
1   02/05/2018 02:17    02/05/2018 03:24        27  28
2   02/05/2018 12:08    02/05/2018 13:28        37  38
3   02/05/2018 06:31    02/05/2018 07:39        31  32
4   02/05/2018 15:20    02/05/2018 16:57        40  41
5   02/05/2018 04:06    02/05/2018 05:13        29  30
6   02/05/2018 17:18    02/05/2018 18:53        42  43
6   02/05/2018 08:32    02/05/2018 09:24        33  34
7   02/05/2018 02:36    02/05/2018 03:30        27  28
8   02/05/2018 03:40    02/05/2018 04:30        28  29

1 个答案:

答案 0 :(得分:0)

有不同的选择,一种方法是:

ref_date_POE = min(df['POETime']) # or any date you want
df['POEHours'] = (df['POETime'] - ref_date_POE).dt.days*24 + df['POETime'].dt.hour +1

此处(df['POETime'] - ref_date_POE).dt.days为您提供df['POETime']ref_date_POE之间的天数,因此* 24会为您提供所需内容。对于+1,似乎你有3,当它是2:18而df['POETime'].dt.hour会给你2,所以只需加1。