【发布时间】:2013-12-05 09:38:57
【问题描述】:
我有一个列表列表,我想根据时间集群将其分组到单独的列表中。
我可以轻松地根据时间对其进行排序,但我还没有确定一种简单的方法将其组合在一起。我对它是日期时间/时间格式或文本很好,任何一种都适合我。我需要根据集群处理其他数据。这是我可能正在使用的示例数据集。
[['asdf', '2012-01-01 00:00:12', '1234'],
['asdf', '2012-01-01 00:00:31', '1235'],
['asdf', '2012-01-01 00:00:57', '2345'],
['asdf', '2012-01-01 00:01:19', '2346'],
['asdf', '2012-01-01 00:01:25', '2345'],
['asdf', '2012-01-01 09:04:14', '3465'],
['asdf', '2012-01-01 09:04:34', '1613'],
['asdf', '2012-01-01 09:04:51', '8636'],
['asdf', '2012-01-01 09:05:15', '5847'],
['asdf', '2012-01-01 09:05:29', '3672'],
['asdf', '2012-01-01 09:05:30', '2367'],
['asdf', '2012-01-01 09:05:43', '9544'],
['asdf', '2012-01-01 14:48:15', '2572'],
['asdf', '2012-01-01 14:48:34', '7483'],
['asdf', '2012-01-01 14:48:56', '5782']]
结果应该是这样的。每个组的嵌套列表列表。
[[['asdf', '2012-01-01 00:00:12', '1234'],
['asdf', '2012-01-01 00:00:31', '1235'],
['asdf', '2012-01-01 00:00:57', '2345'],
['asdf', '2012-01-01 00:01:19', '2346'],
['asdf', '2012-01-01 00:01:25', '2345']],
[['asdf', '2012-01-01 09:04:14', '3465'],
['asdf', '2012-01-01 09:04:34', '1613'],
['asdf', '2012-01-01 09:04:51', '8636'],
['asdf', '2012-01-01 09:05:15', '5847'],
['asdf', '2012-01-01 09:05:29', '3672'],
['asdf', '2012-01-01 09:05:30', '2367'],
['asdf', '2012-01-01 09:05:43', '9544']],
[['asdf', '2012-01-01 14:48:15', '2572'],
['asdf', '2012-01-01 14:48:34', '7483'],
['asdf', '2012-01-01 14:48:56', '5782']]]
集群没有固定的大小,也没有固定的时间。它们可以在一天中随机发生,并且需要根据较大的时间间隔进行聚类。
第一组发生在午夜之后,有 5 个条目,下一组以 09:05 为中心,有 7 个条目。最后一个发生在 14:48 左右,只有 3 个条目。我也可以在每个小时结束时有两组,所以我不能只按小时分组。
我已经按照列表中的第一个字段对数据进行了排序和分组,我只需要将它们分解成更小的块进行处理。我愿意将日期更改为完成分组所需的任何格式,因为这是我对数据进行的分析的关键部分。
我希望将解决方案保留在基本的 python 库中,但如果没有解决方案,我可以尝试获取其他包。
我已经查看了here、here、here、here 和许多其他解决方案,但没有一个解决这些时代的随机性问题。
在大于 X 时间的任何间隔处拆分列表将是一个很好的解决方案,因此我可以将 X 更改为 5 或 10 分钟,无论是否合适。删除长度小于 3 的任何组也将是一个奖励,但可以在最后轻松完成。
我现在唯一真正的想法是循环遍历列表,比较当前时间和新时间并以这种方式拆分列表,但是当有数百万条记录要排序时,这似乎是解决这个问题的一种非常低效的方法和组。
任何帮助将不胜感激。如果其中任何一个没有意义,我会尽力澄清。
【问题讨论】:
-
您似乎要求每小时一组存储桶。这种风格会返回您期望的结果。这也是您发布的第一个 SO 链接中显示的确切方法:stackoverflow.com/questions/2344639/…。
-
你能解释一下
I could also have two groups at either end of the hour as well, so I can not just group by the hour.吗? -
@thefourtheye: OP might mean something like that(效率低,但应该会产生预期的结果)。
-
您的示例中的数据是按时间排序的——您的真实数据是按时间排序的吗?
-
@VooDooNOFX & thefourtheye 不,我不想按小时分组,因为我可以在一小时内有两个单独的组。意思是 00:00:10,20,30 和 00:59:00,10,20 由于差距很大,它们需要是单独的组。我也可以有 00:59:50、01:00:00 和 01:00:10,这将是一组。
标签: python python-2.7