Pandas - 将行分组为时间桶

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
....     

我们将“窗口”定义为一系列连续的事件,这些事件之间的间隔不超过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
....     

我一直在尝试寻找一种方法,在每个窗口中计算“value”列的平均值,但是无法在pandas中正确地完成它。

你成功创建了窗口吗?如何在同一个窗口中定义两个元素?是不超过1秒钟的时间间隔或者属于同一秒钟? - MMF
@MMF:没有,事实上这是主要问题,如何使用pandas创建这些窗口。 - quantdev
那么,如何定义在同一个窗口中的两个元素?是不超过1秒分开还是属于同一秒钟? - MMF
1个回答

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()

这是对此处所提出方法的修改:https://dev59.com/xWYq5IYBdhLWcg3wmRoD - languitar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接