python - 以 10 秒为周期获取数据帧,并在该时间窗口内获取平均值
问题描述
我有一个看起来像这样的熊猫数据框(经过一些预处理):
[ doctets Real First Packet Real End Packet Duration
49 456 2013-02-04 15:47:04.590 2013-02-04 15:47:04.654 64
50 456 2013-02-04 15:53:17.338 2013-02-04 15:53:17.466 128
... ... ... ... ...
10816 47087 2013-02-15 16:41:54.807 2013-02-15 16:42:01.335 6528
10817 168 2013-02-15 16:42:28.770 2013-02-15 16:42:28.898 128
我需要我的数据框的每一行之间的时间
start_date = datetime.datetime(2013, 2, 4, 8, 00, 00) #Feb 4 2013 at 8 am
end_date = datetime.datetime(2013, 2, 15, 17, 00, 00) #Feb 15 2013 at 5 pm
即使给定窗口没有数据,我也希望窗口中的平均比率 docects/duration 为 10 秒。我想要的输出应该是这样的:
[ window doctects/duration
2013-02-04 8:00:00 - 2013-02-04 8:00:10 0
2013-02-04 8:00:11 - 2013-02-04 8:00:21 0
2013-02-04 8:00:21 - 2013-02-04 8:00:31 7.123
. .
. .
. .
. .
2013-02-15 16:59:51 - 2013-02-15 17:00:00 6.987]
我首先尝试这样做:
df.asfreq(freq='10S')
但我不确定还有什么可以尝试的。请任何指导表示赞赏。
解决方案
使用grouper和 apply 你可以实现你想要的。我已经合成了数据
import numpy as np
r = pd.date_range("2013-02-04 8:00:00", freq="S", periods=60)
df = pd.DataFrame({"Real First Packet":r, "Real End Packet":r.shift(5),"doctets":np.random.randint(168,47087,len(r)),
"duration":np.random.randint(64,6528, len(r))})
df.groupby(pd.Grouper(key="Real First Packet", freq="10S")).apply(
lambda r: pd.Series({
"window":r["Real First Packet"].min().strftime("%Y-%m-%d %H:%M:%S") + " - " + r["Real First Packet"].max().strftime("%Y-%m-%d %H:%M:%S"),
"doctets/duration":(r.doctets/r.duration).mean()})
).reset_index(drop=True)
输出
窗户 | 文档/持续时间 | |
---|---|---|
0 | 2013-02-04 08:00:00 - 2013-02-04 08:00:09 | 23.0205 |
1 | 2013-02-04 08:00:10 - 2013-02-04 08:00:19 | 47.8008 |
2 | 2013-02-04 08:00:20 - 2013-02-04 08:00:29 | 15.8908 |
3 | 2013-02-04 08:00:30 - 2013-02-04 08:00:39 | 14.7253 |
4 | 2013-02-04 08:00:40 - 2013-02-04 08:00:49 | 17.7554 |
5 | 2013-02-04 08:00:50 - 2013-02-04 08:00:59 | 24.8611 |
推荐阅读
- python - Keras model.fit_generator() 提供 0.0% 的验证准确度
- git - 想要在 jira 页面上显示各自作者的 git 提交
- gitlab - 将项目推送到 Gitlab 但我无法推送布局
- algorithm - 无限棋盘井字游戏的最佳数据结构
- python - DRF ForeignKey 值未部分显示
- java - 为什么 Scala 有自己的内置库?
- ruby-on-rails - 如何在覆盖另一个模块的某些方法的模块上调用类方法?
- angular - 如何在firestore angularfire中的变量中分配快照的结果
- php - 使用 Regex 从 Wikipedia API 获取信息框
- android - .DexArchiveMergerException:无法合并 dex