python - 如果一小时内的数据点少于 3 个,则删除数据
问题描述
我对此很陌生,所以请多多包涵。我有一个 df ,其中索引为日期时间格式。我的其他列是浓度和仅由 1 组成的计数列。
时间戳 | 专注 | 数数 |
---|---|---|
2018-01-01 08:07:00 | 32.675305 | 1 |
2018-01-01 08:20:00 | 22.816844 | 1 |
2018-01-01 08:28:00 | 17.183438 | 1 |
2018-01-01 08:37:00 | 18.591789 | 1 |
我想通过仅包含每小时记录至少 3 个浓度值的数据来清理 df。
我尝试按小时重新采样,然后得到计数列的总和,它显示每小时数据点的数量是否满足阈值 3。然后我可以删除计数小于 3 的行。
df2 = df.resample('H').sum()
df3 = df2[~(df2['Count'] < 3)]
但是,从这里开始,浓度也被求和了,最终我不想要。我想知道是否有办法回到我重新采样但没有清除数据之前?
还有另一种方法可以更好地做到这一点吗?
解决方案
您可以一次组合多个操作,必须添加额外的行来说明
import pandas as pd
from io import StringIO
df = pd.read_csv(StringIO(
"""Timestamp Concentration Count
2018-01-01 08:07:00 32.675305 1
2018-01-01 08:20:00 22.816844 1
2018-01-01 08:28:00 17.183438 1
2018-01-01 09:37:00 18.591789 1
2018-01-01 09:37:00 18.591789 1"""), sep=" \s+", parse_dates=["Timestamp"])
>>> df[df.groupby(df.Timestamp.dt.floor('h'))['Count'].transform('count') > 2]
Timestamp Concentration Count
0 2018-01-01 08:07:00 32.675305 1
1 2018-01-01 08:20:00 22.816844 1
2 2018-01-01 08:28:00 17.183438 1
正如前面的答案中已经提到的,groupby
应该在 Timestamp 列上执行floor
- 一个小时。然后,用于transform
将每小时计数值分配给组。最后,只使用计数 > 2 的行。
推荐阅读
- pyaudio - pyaudio 无法在 windows 上安装
- couchdb - 在 couchdb 中创建集群时,我面临两个不同的错误 {url_parsing_failed,{error,invalid_url}} & {conn_failed,{error,ehostunreach}}
- c++ - 使用 getline() 函数逐行读取文件中的段落并使用带有编码 fin.eof() 的 while 循环,但结果是无限循环
- node.js - Nodejs如何通过文件传递对象实例?
- javascript - 自定义时间线纸张颜色
- reactjs - 自定义获取数据钩子与 Redux thunk - Redux Toolkit
- javascript - 为什么在请求特定参数后我没有得到正确的响应?(使用 NodeJS 和 Express 路由器的 REST API)
- python - Skip gram模型的输入是否有多个标签?
- c - 为什么这会给出 0 输出
- php - Bootsrapmodal 在其他按钮上设置时未打开