【发布时间】:2014-04-01 04:34:21
【问题描述】:
编辑:Session generation from log file analysis with pandas 似乎正是我想要的。
我有一个包含非唯一时间戳的数据框,我想按时间窗口对它们进行分组。基本逻辑是 -
1) 通过在时间戳前后添加 n 分钟,从每个时间戳创建一个时间范围。
2) 按重叠的时间范围分组。这里的最终效果是时间窗口将与单个时间戳 +/- 时间缓冲区一样小,但是只要多个事件之间的距离小于时间缓冲
感觉 df.groupby(pd.TimeGrouper(minutes=n)) 是正确的答案,但我不知道如何让 TimeGrouper 在看到时间缓冲区内的事件时创建动态时间范围.
例如,如果我针对一组事件尝试 TimeGrouper('20s'):10:34:00、10:34:08、10:34:08、10:34:15、10:34: 28 和 10:34:54,然后 pandas 会给我三组(事件在 10:34:00 - 10:34:20、10:34:20 - 10:34:40 和 10:34:40- 10:35:00)。我只想让两组返回,10:34:00 - 10:34:28,因为在该时间范围内的事件之间的间隔不超过 20 秒,第二组是 10:34:54 .
找到不是静态时间范围的时间窗口的最佳方法是什么?
给定一个看起来像这样的系列 -
time
0 2013-01-01 10:34:00+00:00
1 2013-01-01 10:34:12+00:00
2 2013-01-01 10:34:28+00:00
3 2013-01-01 10:34:54+00:00
4 2013-01-01 10:34:55+00:00
5 2013-01-01 10:35:19+00:00
6 2013-01-01 10:35:30+00:00
如果我在该系列上执行 df.groupby(pd.TimeGrouper('20s')),我会返回 5 组,10:34:00-:20, :20-:40, :40-10 :35:00 等。我想做的是有一些创建弹性时间范围的功能。只要事件在 20 秒内,扩大时间范围。所以我希望能回来 -
2013-01-01 10:34:00 - 2013-01-01 10:34:48
0 2013-01-01 10:34:00+00:00
1 2013-01-01 10:34:12+00:00
2 2013-01-01 10:34:28+00:00
2013-01-01 10:34:54 - 2013-01-01 10:35:15
3 2013-01-01 10:34:54+00:00
4 2013-01-01 10:34:55+00:00
2013-01-01 10:35:19 - 2013-01-01 10:35:50
5 2013-01-01 10:35:19+00:00
6 2013-01-01 10:35:30+00:00
谢谢。
【问题讨论】: