首页 > 解决方案 > 如果数据至少每 6 小时存在一次数据,如何过滤时间序列?

问题描述

我想验证每个 ID 是否至少每 6 小时有一次数据,并过滤掉不符合此条件的 ID。

本质上是一个过滤器:“如果 ID 的数据不是至少每 6 小时一次,则从数据帧中删除 id”

我尝试使用相同的方法每天过滤一个,但在调整代码时遇到了麻烦。

# add day column from datetime index
df['1D'] = df.index.day
# reset index
daily = df.reset_index()
# count per ID per day. Result is per ID data of non-zero 
a = daily.groupby(['1D', 'id']).size()
# filter by right join 
filtered = a.merge(df, on = id", how = 'right')

我无法弄清楚如何在每天以下 6 小时的时间段内调整它:00:01-06:00、06:01-12:00、12:01-18:00、18:01-24:00。

标签: python-3.xpandasdatetimefiltertime-series

解决方案


GroupbyID然后整数除以小时6并获得唯一计数。在您的情况下,它应该大于或等于,4因为在 24 小时内有4- 6 小时的垃圾箱,并且每天有 4 个唯一的垃圾箱,即

垃圾箱 = 4

00:01-06:00

06:01-12:00

12:01-18:00

18:01-24:00

代码

mask = df.groupby('id')['date'].transform(lambda x: (x.dt.hour // 6).nunique() >= 4)
df = df[mask]

推荐阅读