【问题标题】:How to convert hour extracted from date to hour + (date in hours)?如何将从日期中提取的小时转换为小时+(以小时为单位的日期)?
【发布时间】:2018-05-31 14:19:16
【问题描述】:
       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 行左右来自 2018 年 1 月 5 日,然后它继续到 2018 年 2 月 5 日,但在第 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

【问题讨论】:

  • 我们应该如何从您提供的数据中判断日期何时发生变化。你真的应该把它作为一个列。
  • @chrisz 我在帖子底部添加了一个解释,应该会有所帮助

标签: python pandas date time


【解决方案1】:

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

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,在 2:18 时您似乎有 3,而df['POETime'].dt.hour 会给您 2,所以只需添加 1。

【讨论】:

  • 我已经尝试过了,但是遇到了与尝试从字符串中减去字符串等相关的错误。尝试将原始 df 转换为 date.time 但它也不喜欢那样。有什么想法吗?
  • @djj1994 你能告诉我它不喜欢什么吗?
猜你喜欢
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-26
  • 1970-01-01
  • 2019-11-26
  • 1970-01-01
  • 2018-10-15
相关资源
最近更新 更多