python - 依靠 pandas 的滚动时间窗口
问题描述
我正在尝试返回关于(移动)固定点的时间窗口的计数。
这是一种尝试随时了解仪器的状况,作为它之前的使用的函数。
因此,如果仪器在 12.05pm、12.10、12.15、12.30、12.40 和 1pm 使用,则使用次数为:
12.05 -> 1(最后一小时一次)
12.10 -> 2
12.15 -> 3
12.30 -> 4
12.40 -> 5
1.00 -> 6
...但是让我们说使用在 1.06 恢复:1.06 -> 6 这不会增加计数,因为第一次运行是一个多小时前。
如何计算此计数并将其附加为列?
感觉这是一个 groupby/aggregate/count,可能在 lambda 函数中使用 timedeltas,但我不知道从哪里开始。
我也希望能够使用时间窗口,所以不仅仅是过去一个小时,而是一个实例周围的小时,即 + 和 -30 分钟。
以下代码给出了一个起始数据框:
s = pd.Series(pd.date_range('2020-1-1', periods=8000, freq='250s'))
df = pd.DataFrame({'Run time': s})
df_sample = df.sample(6000)
df_sample = df_sample.sort_index()
我找到的最好的帮助(公平地说,我通常可以从逻辑中破解)是滚动时间窗口上的这种不同的计数,但这次我没有管理。
谢谢
解决方案
我以前用这个DataFrame.rolling
函数做过类似的事情:
https ://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.rolling.html
因此,对于您的数据集,首先您需要将索引更新为 datetime 字段,然后您可以执行所需的分析,因此继续您的代码:
s = pd.Series(pd.date_range('2020-1-1', periods=8000, freq='250s'))
df = pd.DataFrame({'Run time': s})
df_sample = df.sample(6000)
df_sample = df_sample.sort_index()
# Create a value we can count
df_sample('Occurrences') = 1
# Set the index to the datetime element
df_sample = df_sample.set_index('Run time')
# Use Pandas rolling method, 3600s = 1 Hour
df_sample['Occurrences in Last Hour'] = df_sample['Occurrences'].rolling('3600s').sum()
df_sample.head(15)
Occurrences Occurrences in Last Hour
Run time
2020-01-01 00:00:00 1 1.0
2020-01-01 00:04:10 1 2.0
2020-01-01 00:08:20 1 3.0
2020-01-01 00:12:30 1 4.0
2020-01-01 00:16:40 1 5.0
2020-01-01 00:25:00 1 6.0
2020-01-01 00:29:10 1 7.0
2020-01-01 00:37:30 1 8.0
2020-01-01 00:50:00 1 9.0
2020-01-01 00:54:10 1 10.0
2020-01-01 00:58:20 1 11.0
2020-01-01 01:02:30 1 11.0
2020-01-01 01:06:40 1 11.0
2020-01-01 01:15:00 1 10.0
2020-01-01 01:19:10 1 10.0
您需要将索引设置为日期时间元素以利用时基窗口,否则您只能使用与行数对应的整数值。
推荐阅读
- javascript - serviceworker.js:1 Uncaught (in promise) TypeError: Request failed .Net Core 3.1
- c++ - 如何在多个函数中插入链表节点而不使用 C++ 中的全局变量?
- mysql - SQL 不显示重复项/仅显示最后一个值
- google-cloud-platform - 获取 openApi 规范中定义的自定义属性
- php - Symfony 5 - DateType::class 的约束
- javascript - 在 ReactJS 中做了一个
- string - 如何从我的日志文件中解析时间戳?
- docker - 如何从 Docker Hub 中删除存储库
- html - jQuery diable 多选下拉选项
- pine-script - 如何将两个函数从 MQL4 转换为 pine 脚本