Python 分组并确定最繁忙的时间段

Python 分组并确定最繁忙的时间段,python,pandas,time-series,Python,Pandas,Time Series,我有一个日志文件,其中一列是日期,另一列是时间。我想找出最流行的时段 Date Time Jan/01/2017 08:23:45 Jan/01/2017 15:54:21 Jan/02/2017 04:02:39 Jan/03/2017 06:33:12 ... 我正在寻找一种有效的方法,将数据分成10分钟的部分,然后找到最流行的1小时间隔。因此,最流行的一小时间隔很可能是连续的,如: Interval Count 08:1

我有一个日志文件,其中一列是日期,另一列是时间。我想找出最流行的时段

Date          Time
Jan/01/2017   08:23:45
Jan/01/2017   15:54:21 
Jan/02/2017   04:02:39 
Jan/03/2017   06:33:12
... 
我正在寻找一种有效的方法,将数据分成10分钟的部分,然后找到最流行的1小时间隔。因此,最流行的一小时间隔很可能是连续的,如:

Interval               Count
08:10:00 - 09:10:00    586
08:20:00 - 09:20:00    565
08:30:00 - 09:30:00    544
...

这需要很好地扩展到GB的数据,我需要能够找到最流行的时间间隔,最好不必对整个表进行排序。

您可以将午夜后的时间转换为分钟,使用整数除法和整数除法。无需对数据进行排序,这应该工作良好且高效:

from collections import Counter

log = """Jan/01/2017   08:23:45
Jan/01/2017   15:54:21
Jan/01/2017   15:50:21
Jan/01/2017   15:52:21
Jan/02/2017   04:02:39
Jan/03/2017   06:33:12"""

portion = 10
interval = 60

counter = Counter()

for line in log.split("\n"):
    time = line.split()[-1]
    hour, minute, second = map(int, time.split(':'))
    since_midnight = hour * 60 + minute
    counter[since_midnight // portion] += 1

for slot, count in counter.most_common():
    print("%02d:%02d -> %02d:%02d - %d" % ((slot * portion) / 60,
                                           (slot * portion) % 60,
                                           ((slot + 1) * portion) / 60,
                                           ((slot + 1) * portion) % 60,
                                           count))
它输出:

15:50 -> 16:00 - 3
04:00 -> 04:10 - 1
08:20 -> 08:30 - 1
06:30 -> 06:40 - 1
由于您没有编写任何代码,我将留给您一个练习:对于给定的10分钟部分,每隔60分钟递增包含该部分的计数器。一个简单的for循环就可以了

此外,您应该逐行读取文件。
拆分(“\n”)
只是一个简单的例子