Pandas - 在时间桶中对行进行分组

时间:2016-10-06 15:14:27

标签: python pandas

我有一个包含数千行的数据框,如下所示:

    time                type      value
0   09:30:01.405735     EVENT_0     2.1
0   09:30:01.405761     EVENT_0     2.1
0   09:30:01.419743     EVENT_0     1.1
1   09:30:02.419769     EVENT_0     32.1
2   09:30:02.419775     EVENT_0     2.15
3   09:30:02.419775     EVENT_0     24.1
4   09:30:06.419775     EVENT_0     3.1
5   09:30:06.419793     EVENT_0     1.1
6   09:30:06.419793     EVENT_0     2.4
....     

我们将“窗口”定义为事件的连续列表,这些事件之间的间隔不超过1秒(即两个连续事件之间的间隔为1秒或更长时间创建一个新窗口)

这里我们有3个窗口:

    time                type      value
0   09:30:01.405735     EVENT_0     2.1
0   09:30:01.405761     EVENT_0     2.1
0   09:30:01.419743     EVENT_0     1.1

====================================

1   09:30:02.419769     EVENT_0     32.1
2   09:30:02.419775     EVENT_0     2.15
3   09:30:02.419775     EVENT_0     24.1

====================================

4   09:30:06.419775     EVENT_0     3.1
5   09:30:06.419793     EVENT_0     1.1
6   09:30:06.419793     EVENT_0     2.4
....     

我试图找到一种方法来计算每个窗口的“值”列的平均值,但无法找到在pandas中正确执行此操作的方法。

1 个答案:

答案 0 :(得分:4)

假设您的时间列是日期时间格式,并且数据框是根据时间列排序的:

# calculate the windows, gives a unique number per entry associating it to its respective window
windows = (data.time.diff().apply(lambda x: x.total_seconds()) >= 1).astype(int).cumsum()
# group by these windows and compute the value mean
data.groupby(windows).value.mean()