对不起,我是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数组中这样做是否更容易?
答案 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数据框中的某些功能。
以下内容有两个假设:
您已添加了一个要分组的额外列,该列将丢弃时间戳记中的时间,以便您可以按天分组。
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