python-3.x - 如果数据至少每 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。
解决方案
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]
推荐阅读
- arangodb - ArangoDB Foxx 微服务入门教程:此示例的有效 URI 是什么?
- html - 在 flex 容器中居中的按钮太窄
- vba - And 和 Or 背后的逻辑与数字
- git - .gitignore 中的异常不排除子文件夹中的文件
- mysql - MySQL /在集合中查找不在列中的值
- html - 手机上呈现的字体不同,如何在手机上检查?
- spring-boot - 模拟 Mvc 单元测试抛出 Http 406
- r - R:“facet_grid 中的错误”-“未使用的参数”
- angular - 在 Angular 6 应用程序中使用 @angular/cdk 7 是否安全?
- python - 如何将 tf.example 发送到 TensorFlow Serving gRPC 预测请求中