Python 如何在Numpy中选择最新分钟值?

Python 如何在Numpy中选择最新分钟值?,python,numpy,Python,Numpy,我有一个numpy数组,看起来像这样: >>> array_data array([[datetime.datetime(2017, 10, 24, 1, 3, 45, 104000), 50, 1], [datetime.datetime(2017, 10, 24, 1, 3, 47, 901000), 50, 1], [datetime.datetime(2017, 10, 24, 1, 3, 56, 214000), 50, 1], [datetime.

我有一个numpy数组,看起来像这样:

>>> array_data
array([[datetime.datetime(2017, 10, 24, 1, 3, 45, 104000), 50, 1],
   [datetime.datetime(2017, 10, 24, 1, 3, 47, 901000), 50, 1],
   [datetime.datetime(2017, 10, 24, 1, 3, 56, 214000), 50, 1],
   [datetime.datetime(2017, 10, 24, 1, 4, 8, 11000), 50, 1],
   [datetime.datetime(2017, 10, 24, 1, 4, 13, 120000), 50, 1],
   [datetime.datetime(2017, 10, 24, 1, 4, 15, 714000), 50, 4],
   [datetime.datetime(2017, 10, 24, 1, 4, 16, 214000), 50, 1],
   [datetime.datetime(2017, 10, 24, 1, 4, 27, 323000), 50, 1],
   [datetime.datetime(2017, 10, 24, 1, 5, 13, 261000), 50, 1],
   [datetime.datetime(2017, 10, 24, 1, 5, 56, 276000), 50, 1],
   [datetime.datetime(2017, 10, 24, 1, 6, 0, 886000), 50, 1],
   [datetime.datetime(2017, 10, 24, 1, 6, 38, 104000), 50, 1],
   [datetime.datetime(2017, 10, 24, 1, 6, 38, 995000), 50, -1],
   [datetime.datetime(2017, 10, 24, 1, 6, 42, 511000), 51, 5],
   [datetime.datetime(2017, 10, 24, 1, 7, 4, 714000), 50, 5],
   [datetime.datetime(2017, 10, 24, 1, 7, 12, 823000), 50, 1],
   [datetime.datetime(2017, 10, 24, 1, 7, 17, 229000), 50, -1],
   [datetime.datetime(2017, 10, 24, 1, 7, 45, 948000), 50, 1],
   [datetime.datetime(2017, 10, 24, 1, 7, 56, 245000), 50, 1],
   [datetime.datetime(2017, 10, 24, 1, 8, 10, 761000), 50, -1],
   [datetime.datetime(2017, 10, 24, 1, 8, 21, 464000), 50, -3],
   [datetime.datetime(2017, 10, 24, 1, 8, 21, 761000), 50, -1]], dtype=object)
如果它是实时更新的,我如何在更新时选择最新的数据分钟数?例如,如果当前时间是2017,10,24,1,7,17,229000,我希望它打印出50*5+50*1+50*-1,如果是2017,10,24,1,7,45,948000,它将打印出50*5+50*1+50*-1+50*1

我想我可以在最新更新的行被更新时提取它的分钟值,并做一个循环,使其倒退,并相互比较它们的分钟值,直到它们不一样为止。但是,我认为当一分钟内有许多行并且更新速度比循环过程快时,这将消耗资源。有没有更有效的方法

我建议使用熊猫。 使用以下命令从numpy数组创建数据帧:

df = pd.DataFrame(array_data[:, 1:],
                  index=array_data[:, 0], columns=['a', 'b'])
或将新的行装入板条箱并添加带有

df = pd.DataFrame(columns=['a', 'b'])
df.loc[datetime.datetime.now()] = [0, 1]
然后,您可以创建一个无秒的日期时间,并将其用于切片

>>> d
datetime.datetime(2017, 10, 24, 1, 8, 21, 761000)
>>> dm = datetime.datetime(d.year, d.month, d.day, d.hour, d.minute)
>>> dm
datetime.datetime(2017, 10, 24, 1, 8)
>>> df[dm:]
                          a   b
2017-10-24 01:08:10.761  50  -1
2017-10-24 01:08:21.464  50  -3
2017-10-24 01:08:21.761  50  -1

您使用的是索引,所以它很有效。

虽然我对这个问题不太清楚,但如果您希望跟踪按时间顺序排列的实时更新,队列数据结构可能更合适,甚至是插入排序的数组。@crazyGamer感谢您的评论。简单地说,我想知道最新数据的范围。对于上面的数组,它将是[-3:]。我也想绘制数据,所以我想我需要坚持使用numpy数组。好吧,那么我的问题是:你想保留所有分钟的数据记录,还是只保留numpy数组中最新的n,比如最新的4个?@crazyGamer我想保留所有数据,同时,想实时跟踪一分钟数据的最新范围并解释它。例如,如果最近一分钟内的值之和大于600,我希望它发出信号。谢谢你的回答,但我正在尝试使用numpy数组来存储实时数据。我认为在处理实时大数据时使用熊猫是不合适的?@maynull-Well,熊猫在numpy之上…