仅在特定日期python保留最后一个时间戳

时间:2018-12-19 01:26:12

标签: python date time

对不起,我是python的新手,只需要向正确的方向指出一点即可。

以下是我正在使用的数据:

 2018-12-14 14:36:00
 2018-12-15 02:00:00
 2018-12-15 04:48:00
 2018-12-16 06:12:00
 2018-12-16 11:28:00
 2018-12-16 23:52:00

我需要做的只是每天保留最后的条目。是否明智的做法是将存储在numpy数组中的值附加到列表中。这是我最好的选择吗?我问是因为我知道我无法从numpy数组中删除值。只是想知道从列表或numpy数组中这样做是否更容易?

3 个答案:

答案 0 :(得分:4)

我注意到您的时间井然有序。如果是这样,您可以简单地转换为字典以保留最后一个条目:

>>> times
['2018-12-14 14:36:00',
 '2018-12-15 02:00:00',
 '2018-12-15 04:48:00',
 '2018-12-16 06:12:00',
 '2018-12-16 11:28:00',
 '2018-12-16 23:52:00']
>>> print(*dict(s.split() for s in times).items(), sep='\n')
('2018-12-14', '14:36:00')
('2018-12-15', '04:48:00')
('2018-12-16', '23:52:00')

如果排序不可靠,请进行排序-这将使时间复杂度降低到 O(n log n),因为 O( n)任务。相反,您应该构建一个dict(键是日期,值是时间列表),并为该dict值取最大值。

答案 1 :(得分:0)

如果这是一个选择,则可以使用pandas数据框中的某些功能。

以下内容有两个假设:

  1. 您的数据已按时间戳排序;
  2. 您已添加了一个要分组的额外列,该列将丢弃时间戳记中的时间,以便您可以按天分组。

    my_dataframe.groupby(['my_date_only_column']).my_timestamp_column.last()
    

答案 2 :(得分:0)

如果您的数据未排序,您也可以将日期存储在collections.defaultdict()中,然后使用最大值datetime

@7.1

上面的方法使用datetime.datetime.strptime()来获取最大的日期时间,如from collections import defaultdict from datetime import datetime data = [ '2018-12-14 14:36:00', '2018-12-15 02:00:00', '2018-12-15 04:48:00', '2018-12-16 06:12:00', '2018-12-16 11:28:00', '2018-12-16 23:52:00' ] d = defaultdict(list) for item in data: date, _ = item.split() d[date].append(item) print([max(v, key=lambda x: datetime.strptime(x, "%Y-%m-%d %H:%M:%S")) for _, v in d.items()]) # ['2018-12-14 14:36:00', '2018-12-15 04:48:00', '2018-12-16 23:52:00'] 参数中所指定。

如果您的数据已经排序,则可以利用itertools.groupby()

key